incidents/MAL-2025-46974

MAL-2025-46974

L0 present onlymalwarecritical
published 2025-09-08 14:26:51Zsource osv.devpackage debug

Malicious code in debug (npm). 3 of 13 watched services resolved a compromised version; 3 did so while it was still installable; none is reachable from first-party code.

3
services exposed
0
act now
3
resolved while live
32
maintainer packages
2
look-alike names
0
unscanned
blast radiusversion → dependency → lockfile → service
versiondependencylockfileservicedebug@4.4.2debug@4.4.2affectedeslint@8.57.1eslint@8.57.10 hopsagent-base@6.0.2agent-base@6.0.20 hopsChrisTregaskis/ai-research-automation@6681e8783be0ai-research-automation@6681e87pins removedChrisTregaskis/ai-research-automation@5b74cd6a0b0aai-research-automation@5b74cd6pins removedChrisTregaskis/ai-research-automation@80fc6d09d6c0ai-research-automation@80fc6d0pins removedGoMake-ltd/n8n-node-gomake@c361ccfc9030n8n-node-gomake@c361ccfin windowLVQT-ss/cakestory-api@5789d2081dbbcakestory-api@5789d20pins removedLVQT-ss/cakestory-api@458e59eb9f7bcakestory-api@458e59ein windowChrisTregaskis/ai-research-automationChrisTregaskis/ai-res…L0 present onlyGoMake-ltd/n8n-node-gomakeGoMake-ltd/n8n-node-g…L0 present onlyLVQT-ss/cakestory-apiLVQT-ss/cakestory-apiL0 present only
  • lockfile resolved while installable
  • L2 act now
  • L1 imported
  • L0 present only
  • unscanned
Q1

Which of my services are exposed, and at what level?

3 services
0 act now
L2 act now 0L1 imported 0L0 present only 3unscanned 0
serviceverdictlockfilespulled in vialatest commit
ChrisTregaskis/ai-research-automationL0 present only3eslint@8.57.1 · 0 hops6681e87 · 2025-09-09 15:54:36Zopen →
GoMake-ltd/n8n-node-gomakeL0 present only1eslint@8.57.1 · 0 hopsc361ccf · 2025-09-08 14:09:18Zopen →
LVQT-ss/cakestory-apiL0 present only2agent-base@6.0.2 · 0 hops5789d20 · 2025-09-13 04:37:42Zopen →

notes ·verdict is per service, highest across its lockfiles. unscanned means the service resolves an affected version but its source was not read — not that it is clean.

Membership is exact (RESOLVED = the lockfile's flattened install tree). Explanation paths are the 3 shortest per lockfile, not all of them.

Q2

Which versions were installable, and for how long?

1 version
1 removed
versionpublished (exact)live untilstate
debug@4.4.2first2025-09-08 13:12:39Z2025-09-08 14:26:51Zupper boundremoved

notes ·live_to is an upper bound: npm publishes no takedown time; we use min(next surviving publish, advisory published).

Q3

Who pulled it in while it was still installable?

2 in window
6 pin removed
sep 08sep 09sep 10sep 11sep 12sep 13sep 14debug@4.4.2 · 2025-09-08T13:12:39+00:00 → 2025-09-08T14:26:51+00:00 (upper bound)installable · 1 versionupper boundadvisory publishedLVQT-ss/cakestory-api · 458e59eb9f7b · 2025-09-08T14:05:12+00:00 · in window + pinned removed GoMake-ltd/n8n-node-gomake · c361ccfc9030 · 2025-09-08T14:09:18+00:00 · in window + pinned removedcakestory-api, n8n-node-gomake ×2ChrisTregaskis/ai-research-automation · 80fc6d09d6c0 · 2025-09-08T15:04:59+00:00 · pinned removed ChrisTregaskis/ai-research-automation · 5b74cd6a0b0a · 2025-09-08T16:55:24+00:00 · pinned removedai-research-automation ×2ChrisTregaskis/ai-research-automation · 6681e8783be0 · 2025-09-09T15:54:36+00:00 · pinned removedai-research-automationLVQT-ss/cakestory-api · 5789d2081dbb · 2025-09-13T04:37:42+00:00 · pinned removedcakestory-api
  • installable window
  • upper bound · npm publishes no takedown time
  • lockfile resolved in window
  • pins a removed version
  • advisory published
servicelockfileresolved atcommitin windowwindow
LVQT-ss/cakestory-apidebug@4.4.22025-09-08 14:05:12Z458e59eyes · pins removed2025-09-08 13:12:39Z2025-09-08 14:26:51Z upper bound
GoMake-ltd/n8n-node-gomakedebug@4.4.22025-09-08 14:09:18Zc361ccfyes · pins removed2025-09-08 13:12:39Z2025-09-08 14:26:51Z upper bound
ChrisTregaskis/ai-research-automationdebug@4.4.22025-09-08 15:04:59Z80fc6d0no · pins removed2025-09-08 13:12:39Z2025-09-08 14:26:51Z upper bound
ChrisTregaskis/ai-research-automationdebug@4.4.22025-09-08 16:55:24Z5b74cd6no · pins removed2025-09-08 13:12:39Z2025-09-08 14:26:51Z upper bound
ChrisTregaskis/ai-research-automationdebug@4.4.22025-09-09 15:54:36Z6681e87no · pins removed2025-09-08 13:12:39Z2025-09-08 14:26:51Z upper bound
LVQT-ss/cakestory-apidebug@4.4.22025-09-13 04:37:42Z5789d20no · pins removed2025-09-08 13:12:39Z2025-09-08 14:26:51Z upper bound

notes ·live_from is exact (npm keeps the publish timestamp after erasing the version). live_to is an upper bound where marked — npm publishes no takedown time.

in_window: the pin was committed while the artifact was installable; it does not prove an install happened. pinned_removed: the lockfile pins a version npm has erased, which is only possible while it was live — commit time is irrelevant.

Q4

What else could the same maintainers reach?

2 maintainers
32 packages
qix6 packages2FA unknowntootallnate26 packages2FA unknown
packageweekly downloadsservices that would be reached
color-convert287,659,317
13ai-research-automation, n8n-node-gomake, insomnia, cakestory-api, documenso, koa, uptime-kuma, Aider-Chat, medplum, socket.io, bootstrap, bruno, wagtail
util-deprecate123,634,143
12n8n-node-gomake, insomnia, cakestory-api, documenso, koa, uptime-kuma, Aider-Chat, medplum, socket.io, bootstrap, bruno, wagtail
agent-base218,048,895
10insomnia, cakestory-api, documenso, uptime-kuma, Aider-Chat, medplum, socket.io, bootstrap, bruno, wagtail
https-proxy-agent164,323,294
10insomnia, cakestory-api, documenso, uptime-kuma, Aider-Chat, medplum, socket.io, bootstrap, bruno, wagtail
is-arrayish103,734,318
10insomnia, cakestory-api, documenso, koa, uptime-kuma, medplum, socket.io, bootstrap, bruno, wagtail
http-proxy-agent116,242,737
9insomnia, cakestory-api, documenso, uptime-kuma, Aider-Chat, medplum, socket.io, bruno, wagtail
error-ex79,832,971
9insomnia, documenso, koa, uptime-kuma, medplum, socket.io, bootstrap, bruno, wagtail
data-uri-to-buffer79,532,327
5insomnia, documenso, uptime-kuma, medplum, socket.io
color-string43,984,374
— not computed
socks-proxy-agent38,234,480
— not computed
color34,051,424
— not computed
simple-swizzle25,876,284
— not computed
proxy-agent24,531,177
— not computed
get-uri23,982,124
— not computed
pac-proxy-agent23,844,963
— not computed

limits ·past the computed cap the reach cell reads “— not computed” — never a 0.

32 co-maintained packages; exposure computed for the 8 most downloaded.

twofa / account_created are not exposed by the public npm registry; shown as unknown, never guessed.

'services at risk' = services resolving the co-maintained package today — the exposure IF that package is compromised next, not exposure to this incident.

Q5

Which look-alike names exist?

2 names
1 kind
scope confusion
@prisma/debugd1@types/debugd1

notes ·The corpus is packages present in the ingested graph, so near-neighbours may be legitimate look-alikes; distance and kind are facts, 'typosquat' is a hypothesis.

Q6

What is the blast radius, service by service?

3 services
0 unscanned
act now0
none
resolved while live3
LVQT-ss/cakestory-api458e59e · 2025-09-08 14:05:12ZGoMake-ltd/n8n-node-gomakec361ccf · 2025-09-08 14:09:18ZChrisTregaskis/ai-research-automation80fc6d0 · 2025-09-08 15:04:59Z
unscanned0
none

notes ·3 services · 6 lockfile snapshots · 32 co-maintained packages · composed in 16.45 s

composed
2026-08-16 14:28:33Z · every figure above is read from this report’s own JSON, and each card carries the statement that produced it.
badge · ChrisTregaskis/ai-research-automation
reachable badge for ChrisTregaskis/ai-research-automation![reachable](/badge/ChrisTregaskis/ai-research-automation.svg)

Beyond the watched set

public repositories on GitHub that pin an affected version today, not yet scanned by Reachable
report generated 2026-08-16 14:28:33Zgraph snapshot advisory 657 · lockfile 246 · maintainer 3,028 · package 6,446 · service 13 · version 55,50722 statements · 50 rows · 16.45 s total
engine sha256:db78309a233bbolt://127.0.0.1:7687 · Linux-7.1.8-arch1-3-x86_64-with-glibc2.44

All ms are wall-clock from the Python driver over loopback Bolt; cold = first run after the node was idle, warm = subsequent runs. Both are reported; neither is estimated.