@immobiliarelabs/backstage-plugin-gitlab@2.1.2
Malicious code in @immobiliarelabs/backstage-plugin-gitlab (npm)
Analysis
A compromised release of this Backstage GitLab plugin ships two files that are not part of the genuine package: a root-level binding.gyp and an index.js dropper. The genuine package is a pure React/TypeScript frontend plugin and publishes only its dist/ output. The injected binding.gyp uses GYP command-expansion syntax ("<!(node index.js ...)") in its sources field; because npm automatically runs node-gyp whenever a binding.gyp exists at the package root, this causes `node index.js` to execute on every install of the package — with no install or postinstall script declared, and regardless of the package main entry. index.js is a layered, obfuscated dropper: an outer eval() runs a Caesar-cipher-decoded wrapper that imports node:crypto, AES-128-GCM-decrypts an embedded encrypted blob, and eval()s the decrypted second-stage code. The use of a native-build manifest to trigger silent install-time execution in a frontend-only plugin, combined with multi-layer (Caesar + AES-GCM) self-decrypting eval, is characteristic of a supply-chain attack rather than legitimate functionality.
- analyzed by
- Leitwacht
- first seen
- Jun 26, 2026, 03:18 PM
- analyzed
- Jun 28, 2026, 06:25 AM
- weekly installs
- 9,457
Related advisories
- @immobiliarelabs/backstage-plugin-gitlab@1.0.1 same package
- @immobiliarelabs/backstage-plugin-ldap-auth-backend@1.1.3
- @immobiliarelabs/backstage-plugin-gitlab-backend@3.0.3
- @immobiliarelabs/backstage-plugin-ldap-auth-backend@3.0.2
- ai-sdk-ollama@0.13.1
- creditcard.js@2.1.8
- react-check-error@2.1.6
- chai-assert-kit@3.8.1
Independently detected by the Leitwacht supply-chain probe. IOCs are defanged. Published CC0. Think this is a mistake? See the dispute policy.