> ## Documentation Index
> Fetch the complete documentation index at: https://docs.opensourcemalware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Find out if an asset is malicious

> Use the free Check Malicious endpoint to query packages, repositories, URLs, and domains for malicious content.

Use the `check-malicious` endpoint to send a single `GET` request with a `report_type` and a `resource_identifier`, and the API tells you whether that resource appears in the OSM threat database. The endpoint covers all supported resource types through one unified interface.

Use this endpoint to:

* **Investigate a suspected threat:** During an active incident or hunt, look up any resource to instantly confirm whether it's in the database and get more info about it.
* **Enrich threat intelligence workflows:** Integrate real-time malicious resource lookups into your SIEM, SOAR, or TIP to automatically flag known-bad indicators as they surface.
* **Monitor exposure across your environment:** Check whether resources already in use in your organization have been flagged since you last reviewed them.
* **Vet assets before they're installed:** Query before accepting a package or extension suggested by an AI coding assistant.
* **Scan dependencies in CI/CD:** Catch malicious packages before they reach production by querying OSM as part of your build pipeline.

**Endpoint**

```text theme={null}
GET https://api.opensourcemalware.com/functions/v1/check-malicious
```

**Required header**

```text theme={null}
Authorization: Bearer osm_your_token
```

## Query parameters

| Parameter             | Required     | Description                                                                       |
| --------------------- | ------------ | --------------------------------------------------------------------------------- |
| `report_type`         | **Required** | `package` \| `container` \| `repository` \| `url` \| `domain` \| `ip` \| `wallet` |
| `resource_identifier` | **Required** | The resource to check (package name, URL, domain, etc.)                           |
| `ecosystem`           | Optional     | For packages: `npm`, `pypi`, `maven`, `nuget`, `vscode`, `skills`, etc.           |
| `version`             | Optional     | Specific package or container version to check                                    |

## Responses

### Malicious resource found - all versions malicious

```json theme={null}
{
  "malicious": true,
  "report_type": "package",
  "resource_identifier": "tns-py",
  "ecosystem": "pypi",
  "version": null,
  "osm_url": "https://opensourcemalware.com/pypi/tns-py",
  "last_scanned_at": "2026-04-28T07:04:53.788+00:00",
  "scan_result": false,
  "scan_severity": null,
  "scan_count": 2,
  "threat_count": 1,
  "details": {
    "threat_id": "e47dba4d-45fa-4764-a6ef-3399f381714f",
    "severity_level": "high",
    "description": "This package pretends to be a utility that helps you load environment variables from .env files and system environment, then sending them to a specified API endpoint. But its a wolf in sheeps clothing as it really exfiltrates environment variables to an attacker-controlled url.",
    "version_info": "all"
  }
}
```

<Note>
  A blank `version_info` field or a null response also indicates that all versions are malicious.
</Note>

### Malicious resource found - select versions malicious

```json theme={null}
{
  "malicious": true,
  "report_type": "package",
  "resource_identifier": "axios",
  "ecosystem": "npm",
  "version": null,
  "osm_url": "https://opensourcemalware.com/npm/axios",
  "last_scanned_at": "2026-04-11T00:48:30.774+00:00",
  "scan_result": true,
  "scan_count": 6,
  "threat_count": 1,
  "details": {
    "threat_id": "a5b0c00a-f2db-4f4a-87fd-ff62882d20bf",
    "severity_level": "critical",
    "description": "Legitimate axios npm package compromised via hijacked maintainer account. Malicious versions 1.14.1 and 0.30.4 were published by an attacker who changed the maintainer email to ifstap@proton.me. The compromised package contacts a C2 server and drops platform-specific RAT payloads (macOS, Windows, Linux). After execution, the malware deletes itself and replaces its own package.json with a clean version to evade forensic detection.",
    "version_info": "1.14.1, 0.30.4"
  }
}
```

### Resource not found

```json theme={null}
{
  "malicious": false,
  "report_type": "package",
  "resource_identifier": "safe-pkg",
  "ecosystem": "npm",
  "message": "Resource not found in malicious database"
}
```

### 401 — Missing API token

```json theme={null}
{ "error": "API token required. Provide token in Authorization header or apikey query parameter." }
```

### 401 — Invalid or inactive token

```json theme={null}
{ "error": "Invalid or inactive API token" }
```

### 400 — Invalid or missing `report_type`

```json theme={null}
{ "error": "Invalid or missing 'report_type' parameter. Valid types: <comma-separated list of VALID_TYPES>" }
```

### 400 — Missing `resource_identifier`

```json theme={null}
{ "error": "Missing required 'resource_identifier' parameter." }
```

### 400 — Invalid repository format

```json theme={null}
{ "error": "Invalid repository format. Must include protocol (e.g., 'https://github.com/org/repo' or 'http://gitlab.example.com/org/repo')." }
```

### 500 — Database query failed

```json theme={null}
{ "error": "Database query failed" }
```

## Examples

The following examples use real assets from the OpenSourceMalware threat database. Each one returns `"malicious": true` so you can see what a full response looks like across different resource types.

<Tip>
  Examples use `$OSM_API_KEY` as an environment variable. Replace it with your token directly if you haven't set one up.
</Tip>

### npm package: @tallyui/database

For scoped npm packages (those with an `@org/name` format), URL-encode the `@` as `%40` and the `/` as `%2F` in the `resource_identifier`.

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=package&resource_identifier=%40tallyui%2Fdatabase&ecosystem=npm" \
  -H "Authorization: Bearer $OSM_API_KEY"
```

```json theme={null}
{
  "malicious": true,
  "report_type": "package",
  "resource_identifier": "@tallyui/database",
  "ecosystem": "npm",
  "version": null,
  "osm_url": "https://opensourcemalware.com/npm/%40tallyui%2Fdatabase",
  "last_scanned_at": "2026-06-02T01:48:47.014+00:00",
  "scan_result": true,
  "scan_count": 6,
  "threat_count": 1,
  "details": {
    "threat_id": "ded08135-a413-48c0-a5f4-51cd4d7d3ca0",
    "severity_level": "critical",
    "description": "Compromised versions of `@tallyui/database` (1.0.1, 1.0.2, 1.0.3) part of the Mini Shai-Hulud npm supply-chain worm (May 2026), originating from the TanStack package compromise and attributed to threat group TeamPCP. The worm self-propagates by stealing OIDC publishing tokens during legitimate CI runs and republishing infected packages with valid Sigstore provenance attestations. Each compromised release contains a multi-stage implant that harvests GitHub Actions secrets, AWS/Kubernetes/HashiCorp Vault credentials, and exfiltrates over the Session P2P messaging network. Cross-referenced from Aikido, StepSecurity, and Socket research.",
    "version_info": "1.0.1, 1.0.2, 1.0.3"
  }
}
```

### VS Code extension: nrwl.angular-console

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=package&resource_identifier=nrwl.angular-console&ecosystem=vscode" \
  -H "Authorization: Bearer $OSM_API_KEY"
```

```json theme={null}
{
  "malicious": true,
  "report_type": "package",
  "resource_identifier": "nrwl.angular-console",
  "ecosystem": "vscode",
  "version": null,
  "osm_url": "https://opensourcemalware.com/vscode/nrwl.angular-console",
  "last_scanned_at": "2026-05-22T10:13:13.543+00:00",
  "scan_result": true,
  "scan_severity": "low",
  "scan_count": 3,
  "threat_count": 1,
  "details": {
    "threat_id": "ca1876b5-484d-40df-9d16-c346a31dd48f",
    "severity_level": "high",
    "description": "Nx Console VS Code extension (2.2M+ installs) was compromised on May 18, 2026 via a stolen contributor GitHub token. Version 18.95.0 was published to the VS Code Marketplace with malicious code injected into main.js that fetches an obfuscated payload via npx from an orphan commit in the nrwl/nx repo. Payload steals credentials for GitHub, npm, AWS, HashiCorp Vault, Kubernetes, 1Password, and Claude Code; installs a Python C2 backdoor; and uses GitHub Search API as a dead-drop channel.",
    "version_info": "18.95.0"
  }
}
```

### Container image: aquasec/trivy

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=container&resource_identifier=aquasec%2Ftrivy" \
  -H "Authorization: Bearer $OSM_API_KEY"
```

```json theme={null}
{
  "malicious": true,
  "report_type": "container",
  "resource_identifier": "aquasec/trivy",
  "osm_url": "https://opensourcemalware.com/container/aquasec%2Ftrivy",
  "last_scanned_at": null,
  "scan_result": null,
  "scan_severity": null,
  "scan_count": 0,
  "threat_count": 2,
  "details": {
    "threat_id": "168a0deb-6ed5-43ce-9377-e0c728ee41ed",
    "severity_level": "critical",
    "description": "Malicious Docker Hub image published by TeamPCP on March 22, 2026 as part of the Trivy supply-chain compromise. Second malicious image release following v0.69.5, containing the same backdoored Trivy binary with credential stealer and persistence dropper. Exfiltrates encrypted bundles to scan.aquasecurtiy.org and Cloudflare tunnel C2."
  }
}
```

### Repository: hxxps\://github\[.]com/Yassin-Younis/bypass-in-app-browser

The `resource_identifier` must be the full repository URL including `https://`. URL-encode the full value before passing it as a query parameter.

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=repository&resource_identifier=https%3A%2F%2Fgithub.com%2FYassin-Younis%2Fbypass-in-app-browser" \
  -H "Authorization: Bearer $OSM_API_KEY"
```

```json theme={null}
{
  "malicious": true,
  "report_type": "repository",
  "resource_identifier": "https://github.com/Yassin-Younis/bypass-in-app-browser",
  "osm_url": "https://opensourcemalware.com/repository/https%3A%2F%2Fgithub.com%2FYassin-Younis%2Fbypass-in-app-browser",
  "last_scanned_at": null,
  "scan_result": null,
  "scan_severity": null,
  "scan_count": 0,
  "threat_count": 1,
  "details": {
    "threat_id": "7c5a9372-a22a-49e8-9c68-6b634847d1c0",
    "severity_level": "high",
    "description": "PolinRider backdoor injection - obfuscated JavaScript payload appended to next.config.mjs in compromised repository. Payload uses string shuffling deobfuscation with signature rmcej%otb% to execute hidden malicious code on module load."
  }
}
```

### Domain: server-genimi-check\[.]vercel\[.]app

Pass only the domain, without a protocol or path.

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=domain&resource_identifier=server-genimi-check.vercel.app" \
  -H "Authorization: Bearer $OSM_API_KEY"
```

```json theme={null}
{
  "malicious": true,
  "report_type": "domain",
  "resource_identifier": "server-genimi-check.vercel.app",
  "osm_url": "https://opensourcemalware.com/domain/server-genimi-check.vercel.app",
  "last_scanned_at": null,
  "scan_result": null,
  "scan_severity": null,
  "scan_count": 0,
  "threat_count": 1,
  "details": {
    "threat_id": "8ea1b090-3043-4759-ac18-a27167f9338d",
    "severity_level": "critical",
    "description": "DPRK C2 domain hosted on Vercel, used by Contagious Interview / Lazarus Group malicious npm packages. The domain name impersonates Google Gemini (misspelled as \"genimi\") to appear legitimate. Serves as a command-and-control endpoint for download-and-execute payloads delivered via malicious npm packages. Referenced by DPRK-attributed packages in the kmsec.uk research database."
  }
}
```

### URL

Check a specific URL for malicious content such as phishing pages or malware delivery endpoints.

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=url&resource_identifier=https://phishing-site.com/login" \
  -H "Authorization: Bearer osm_your_token"
```

### IP address

Check IP addresses associated with C2 infrastructure, attack sources, or other malicious network activity.

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=ip&resource_identifier=192.168.1.100" \
  -H "Authorization: Bearer osm_your_token"
```

### Crypto wallet

Check cryptocurrency wallet addresses linked to ransomware payments, extortion campaigns, or other attacks.

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=wallet&resource_identifier=0x1234567890abcdef1234567890abcdef12345678" \
  -H "Authorization: Bearer osm_your_token"
```

## Using check-malicious with AI coding assistants

AI coding assistants like Claude, GitHub Copilot, and Cursor suggest and install open-source dependencies as part of their workflow, often without any malicious resource checking. Since these tools generate and execute package installation commands directly, a malicious package recommendation gets installed as fast as a legitimate one.

Before accepting a dependency suggestion from an AI coding assistant, run a quick check against the OSM database. Pass the package name and ecosystem to `/check-malicious` and confirm the response returns `"malicious": false` before installing.

```text theme={null}
curl -X GET "https://api.opensourcemalware.com/functions/v1/check-malicious?report_type=package&resource_identifier=suggested-package&ecosystem=npm" \
  -H "Authorization: Bearer osm_your_token"
```

This is particularly important in agentic coding environments where the assistant is operating with more autonomy, writing code, resolving dependencies, and running commands with less human review at each step. The faster the assistant moves, the more important it is to have checks in the loop.

You can also build this check into your workflow by wrapping your package manager commands in a simple script that queries OSM before allowing an install to proceed, giving you a lightweight safeguard without changing how you work with your AI tools.
