MAL-2026-14331

See a problem?
Import Source
https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/exam-kit/MAL-2026-14331.json
JSON Data
https://api.test.osv.dev/v1/vulns/MAL-2026-14331
Aliases
  • GHSA-3g8c-37c3-75vv
Published
2026-08-20T18:15:34Z
Modified
2026-08-20T22:01:41.308238077Z
Summary
Malicious code in exam-kit (npm)
Details

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

Source: amazon-inspector (29cd95c1b59238861675a30a947648a2280420c11e53dcb4f8501db5cb736313)

On any require/import of exam-kit, the main entry runs a top-level await that reads an out-of-package file at../../../../public/logo.ico, DES-decrypts it using a hardcoded key ('bf497c0b9cee'), and pipes the plaintext into a detached node child process via stdin (spawn('node', [], {detached:true, stdio:['pipe','ignore','ignore']}); stdin.write(rsaDecrypted); unref()). The decrypted bytes are opaque code executed on the installer's host with no integrity check. The loader hides its purpose with cover-story naming: a variable named rsaDecrypted actually holds DES-decrypted content, the function readLogoIco treats an.ico asset as ciphertext, and errors are logged as 'ThetaSDK initialization error' — unrelated to the package's stated exam-session purpose. The path-traversal source (../../../../public/logo.ico), hardcoded symmetric key, misleading log strings, and detached/unref'd spawn are dropper-loader characteristics rather than legitimate library behavior.

Source: ghsa-malware (e817468936bfd06bc41640b486d0d044e5934bb8e7653bd97340efd4920d8b7a)

Any computer that has this package installed or running should be considered fully compromised. All secrets and keys stored on that computer should be rotated immediately from a different computer. The package should be removed, but as full control of the computer may have been given to an outside entity, there is no guarantee that removing the package will remove all malicious software resulting from installing it.

Database specific
{
    "malicious-packages-origins": [
        {
            "ranges": [
                {
                    "type": "SEMVER",
                    "events": [
                        {
                            "introduced": "0"
                        }
                    ]
                }
            ],
            "sha256": "e817468936bfd06bc41640b486d0d044e5934bb8e7653bd97340efd4920d8b7a",
            "modified_time": "2026-08-20T18:15:37Z",
            "id": "GHSA-3g8c-37c3-75vv",
            "import_time": "2026-08-20T18:26:05.013142318Z",
            "source": "ghsa-malware"
        },
        {
            "id": "IN-MAL-2026-018457",
            "versions": [
                "1.0.2"
            ],
            "modified_time": "2026-08-20T20:43:35Z",
            "sha256": "29cd95c1b59238861675a30a947648a2280420c11e53dcb4f8501db5cb736313",
            "import_time": "2026-08-20T20:45:13.273120603Z",
            "source": "amazon-inspector"
        },
        {
            "id": "IN-MAL-2026-018456",
            "sha256": "9c8686f2b1b56288a38507e0762a3d9bb6ea475e7b09745bbf41f1df975513df",
            "modified_time": "2026-08-20T20:43:26Z",
            "versions": [
                "1.0.3"
            ],
            "import_time": "2026-08-20T20:45:13.160789894Z",
            "source": "amazon-inspector"
        },
        {
            "id": "IN-MAL-2026-018481",
            "sha256": "3ff4b1030975db1007de0f1d672cb77c0b02928dd7b9c6b3ab2f358e22c6bcaf",
            "modified_time": "2026-08-20T21:17:03Z",
            "versions": [
                "1.0.1"
            ],
            "import_time": "2026-08-20T21:43:26.841562755Z",
            "source": "amazon-inspector"
        },
        {
            "id": "IN-MAL-2026-018483",
            "sha256": "ed37c8df2d419573539d6d59d1da8aa3a393be7ce73be68b50998cd7c1eb6774",
            "modified_time": "2026-08-20T21:17:24Z",
            "versions": [
                "1.0.0"
            ],
            "import_time": "2026-08-20T21:43:26.972078307Z",
            "source": "amazon-inspector"
        }
    ]
}
References
Credits

Affected packages

npm / exam-kit

Package

Affected ranges

Type
SEMVER
Events
Introduced
0Unknown introduced version / All previous versions are affected

Affected versions

1.*
1.0.0
1.0.1
1.0.2
1.0.3

Database specific

indicators
{
    "evidence_files": [
        {
            "sha256": "cf29504ad8e42e0e8a4db39c7365c27d57bbdd56ff69fad541fadddb904333d7",
            "path": "src/api/session-api.js",
            "tlsh": "39c1f25c2c03e12757f0e3bd4e32c454eb735a913b119aa1faac77a12fa94d06532ed8"
        }
    ]
}
source
"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/exam-kit/MAL-2026-14331.json"
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"
    },
    {
        "name": "Embedded Malicious Code",
        "description": "The product contains code that appears to be malicious in nature.",
        "cweId": "CWE-506"
    },
    {
        "name": "Embedded Malicious Code",
        "description": "The product contains code that appears to be malicious in nature.",
        "cweId": "CWE-506"
    },
    {
        "cweId": "CWE-506",
        "description": "The product contains code that appears to be malicious in nature.",
        "name": "Embedded Malicious Code"
    }
]