Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Malicious package

@ecg-internal/reviews-dialog-uinpm

Advisory published Updated

@ecg-internal/reviews-dialog-ui is a confirmed malicious npm package (MAL-2026-18211) that opens a backdoor for remote access (malicious versions 0.0.1, 1.0.0, 1.0.1…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in @ecg-internal/reviews-dialog-ui (npm)

MAL-2026-18211
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall @ecg-internal/reviews-dialog-ui

What this malware does

The npm package @ecg-internal/[email protected] is a dependency-confusion payload targeting an internal @ecg-internal/* scope. package.json declares a postinstall hook (node beacon.cjs) that runs on every npm install, and beacon.cjs POSTs the installer's hostname (os.hostname()), install path (__dirname), current working directory (process.cwd()), node version, and package name over plain HTTP to the hardcoded bare-IP endpoint http://185.158.107.175:8787/_ah/dc. The published main is a no-op Proxy object (module.exports = new Proxy({}, { get:... })) so consuming builds do not fail at require time, and the version 99.0.1 is set abnormally high to win semver resolution against any legitimate internal package of the same name. The scoped internal-looking name, inflated version, inert Proxy shim, and install-time callback together constitute the canonical dependency-confusion attack shape, delivering reconnaissance of the installer's build/CI environment to an attacker-controlled IP.

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.

Malicious versions

7 flagged
0.0.11.0.01.0.12.0.02.0.13.0.099.0.1

Indicators of compromise (SHA-256)

31d077157e19fb33158004d020ab55ba68751851a9dbab6a010064a83b8436c4
971f8d7c983ed87130fa2043137381f6c235c176e94af181a8c12afdb0fd6f74
df31aa21f1b025f8e1e3b01066f80786683a7381ed32fa890725f452884d29c8
e9552c085ec1995eeea8a2636c59cbf607657e3f3943fdb5ac08024c32b7e94e
5061154b16539757fed5e624ab549ca182fa3d4edd90b7b1e9026da5131de5bc
7b355a4dd9d968fe4fece2f84a7121326e667c9e54c5dd03902105bd3a6bd86f
834e609f11828e458a1b0ea0a6d2261064b44e060df941cc7d0b3506639b39cf
931cd681ef40eca7cb4c0f8ca9b8757d621f3a69cc5ff7f06c245cbb8a4fbdf3

Detection & response playbook

Backdoor / remote access
  1. Find it

    Search your lockfiles and build artifacts for @ecg-internal/reviews-dialog-ui (7 malicious versions).

  2. If you installed it — respond

    @ecg-internal/reviews-dialog-ui establishes remote access, so treat any host that installed it as fully compromised. Isolate the machine, remove the package, rotate all credentials it could reach, and rebuild from a trusted image rather than cleaning in place — a backdoor may have planted additional persistence.

  3. Did it already run?

    If @ecg-internal/reviews-dialog-ui was installed, its post-install payload may already have run. Removing the package does not undo that — check outbound connections and credential use from the install window onward.

Frequently asked questions

No. @ecg-internal/reviews-dialog-ui on npm has been identified as a malicious package (versions 0.0.1, 1.0.0, 1.0.1, 2.0.0, 2.0.1, 3.0.0, 99.0.1 flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-021584IN-MAL-2026-021585IN-MAL-2026-021582IN-MAL-2026-021587IN-MAL-2026-021583IN-MAL-2026-021588IN-MAL-2026-021586GHSA-r47j-grcr-p9h9

References

Credits

  • Amazon Inspector · finder

Detect & block this

O3 blocks @ecg-internal/reviews-dialog-ui-class packages before install and in CI — and if it already ran, its runtime egress monitoring catches the C2 callback and severs the channel.

Explore