npm

The helpersutils-dev-tools npm Supply Chain Attack

Updated 19 Oct 2026 · Incident date 2 Sept 2026

The npm package helpersutils-dev-tools version 1.0.11 contains code that sends the domain of the page that loads it to a hardcoded IP address, 5.189.173.113, on port 8899. The OpenSSF record states that the package calls itself development utility helpers. The code has no link to that purpose.

The OpenSSF malicious packages database lists the package as MAL-2026-16465, from a report by Amazon Inspector. GitHub published malware advisory GHSA-w2cw-5p4p-mc64 on 12 October 2026. On the same day, npm replaced the package with a security holding package.

What happened

A package named helpersutils-dev-tools reached npm on 2 September 2026. Version 1.0.11 sends page domains to an outside server. The registry shows 18 versions, from 1.0.0 to 1.0.18, with no 1.0.10. Versions 1.0.0 to 1.0.17 all went up on 2 September 2026, within about two and a half hours. Version 1.0.18 followed on 3 September 2026.

The OpenSSF record MAL-2026-16465 describes version 1.0.11. Its main module, index.js, runs a function as soon as a program loads the package with require. That function makes an image request over plain HTTP to 5.189.173.113:8899 on the path /csp-edu. The request carries the domain of the page that uses the package as a query parameter.

A second file, bypass.js, makes a similar request to the same host on the path /csp. The OpenSSF record states that the destination has no connection to the stated purpose of the package. Amazon Inspector is the finder credited on the record, which OpenSSF published on 23 September 2026.

npm download counts show 6,005 downloads between 2 September and 11 October 2026. The first day alone had 2,068 downloads. On 12 October 2026, the day npm replaced the package, the count was 355.

GitHub reviewed and published advisory GHSA-w2cw-5p4p-mc64 on 12 October 2026. It classes the package as malware under CWE-506, Embedded Malicious Code. On 12 October 2026, npm published version 0.0.1-security, a security holding package. The registry now lists npm as the only maintainer, and the earlier versions are no longer available for install.

Affected versions

The two sources give different ranges for the affected versions.

  • The OpenSSF record MAL-2026-16465 names version 1.0.11 and gives the range 1.*.
  • The GitHub advisory GHSA-w2cw-5p4p-mc64 marks every version as affected (>= 0) and lists no fixed version.

The registry shows versions 1.0.0 to 1.0.9 and 1.0.11 to 1.0.18. It has no publish time for 1.0.10. No source we fetched describes the code in versions other than 1.0.11. Treat every 1.x version as affected. Version 0.0.1-security is the npm placeholder and contains no code.

Indicators of compromise

The OpenSSF record lists these indicators for version 1.0.11.

  • Network: 5.189.173.113:8899, paths /csp-edu and /csp, over plain HTTP
  • index.js sha256 513bf3bb90c0a9e18d2ee1d2d5e0980311e544ea7a739a31b01730050b1072eb
  • bypass.js sha256 bb5567181ca8455a609d18285df69a78c847e188124f29159fecdacedb764cc5
  • helpersutils-dev-tools-1.0.11.tgz sha1 3495ac80408eaf684a2ea89f3bdc4aea1b4904e9

How to check

Run this command in each project folder. If it prints any 1.x version of helpersutils-dev-tools, the project installed the package.

npm ls helpersutils-dev-tools

Then search your lockfiles and installed packages for the package name and the server address. These commands only read files.

grep -rn "helpersutils-dev-tools" package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null
grep -rln "5.189.173.113" node_modules

If you keep web server, proxy or firewall logs, search them for connections to 5.189.173.113 on port 8899.

What to do now

  1. If a project lists helpersutils-dev-tools, remove it with npm uninstall helpersutils-dev-tools and delete it from your lockfile.
  2. Block 5.189.173.113 at your firewall or proxy.
  3. Search your logs for requests to 5.189.173.113:8899 to learn which pages and builds loaded the package.
  4. The GitHub advisory tells you to treat any computer that installed the package as fully compromised. On that computer, rotate every secret and key, and do it from a different computer.
  5. If you cannot prove that the computer is clean, rebuild it. The GitHub advisory states that removal of the package alone gives no guarantee.

What Vigilance would show (rebuilt from public reports)

Vigilance compares the version you trust with the new one and names the file that gained a new power. The block below is rebuilt from the public reports in the words Vigilance prints. It is not a captured scan, because the malicious release is not redistributed.

vigi diff --old helpersutils-dev-tools-1.0.9 --new helpersutils-dev-tools-1.0.11
files scanned: 20

HEADS UP  1 file can now do things the old version could not. The rest changed and gained nothing.

CHANGED    index.js
           It now downloads from the internet and runs other programs. It did not before.

Frequently asked questions

What is helpersutils-dev-tools?

It is an npm package that described itself as development utility helpers. Version 1.0.11 sends the domain of the page that loads it to 5.189.173.113 on port 8899. npm replaced it with a security holding package on 12 October 2026.

Which versions of helpersutils-dev-tools are malicious?

The OpenSSF record names version 1.0.11 and the range 1.*. The GitHub advisory marks every version as affected. Treat every 1.x version as malicious.

How do I know if I installed helpersutils-dev-tools?

Run npm ls helpersutils-dev-tools in each project folder and search your lockfiles for the name. Also search your network logs for 5.189.173.113.

Sources

  1. github.com/advisories/GHSA-w2cw-5p4p-mc64
  2. osv.dev/vulnerability/MAL-2026-16465
  3. registry.npmjs.org/helpersutils-dev-tools
  4. api.npmjs.org/downloads/range/2025-01-01:2026-10-12/helpersutils-dev-tools

More supply chain attacks

All 122 attacks in the library · npm supply chain attacks · How to prevent supply chain attacks

Check the next update before you install it

Vigilance compares the version you trust with the new one. It names the one file that gained a power the old version did not have.

Start the free 14-day watchBrowse the attack library