# MAL-2026-12948: Malicious code in bnpl-blocks-fonts (npm)


- **Type:** Malicious package
- **Package:** `bnpl-blocks-fonts` (npm)
- **Published:** 5 Aug 2026

## What is MAL-2026-12948?

MAL-2026-12948 is a malicious package in bnpl-blocks-fonts, published on 5 Aug 2026. 

### Official description

The package presents itself as a fonts helper but its index.js unconditionally requires./_ext, which on module load fetches a platform-specific binary from hardcoded Cloudflare Workers subdomains (oob-worker.cf101-adf.workers.dev, cf99-9b3.workers.dev, cf100-416.workers.dev) with a DNS-TXT fallback channel over *.dl.wel1.ru (chunked base64 delivered via resolveTxt on c.<domain> and N.<domain>). Hostnames are split into array fragments and joined at runtime to evade static analysis. The fetched bytes are written to a disguised temp path (.cache_<hex> on Unix, dotnet_diag_<hex>.exe on Windows), chmodded to 0755, and spawned detached via cp.spawn('/bin/sh', ['-c', fp+' &']) or cp.spawn('cmd',...). No hash or signature is verified and the payload is opaque. A parallel dropper in lib/telemetry.js mirrors the same design (base64 chunk decode, chmodSync via property-name splitting, shell spawn) as an alternate loader. The declared 'fonts' / 'analytics/telemetry' purpose does not match fetching and executing anonymous remote binaries at require time.

## What should I do about MAL-2026-12948?

Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.

## Fix prompt for AI coding agents

```text
MAL-2026-12948 is a malicious package: bnpl-blocks-fonts (npm). Every version was published to cause harm.

Task:
1. Search this repository's dependency manifests and lockfiles for the package, including transitive dependencies.
2. If it is present, remove it, regenerate the lockfile with the project's package manager, and replace whatever it was used for.
3. List any CI runners, developer machines or containers that installed it, so their secrets can be rotated.
4. If the package is not used anywhere, say so and change nothing.

Reference: https://insights.sbomify.com/MAL-2026-12948/ (Markdown: https://insights.sbomify.com/MAL-2026-12948/index.md)
```

## Sources

- OSV: https://osv.dev/vulnerability/MAL-2026-12948

---
From sbomify Insights: https://insights.sbomify.com/MAL-2026-12948/
Summaries are generated and may contain mistakes; the official description above is the record.
