I've got what I need. Let me break this down for the panel.
Technical Comparison: Two Distinct Attack Vectors
Campaign 1 — Laravel-Lang Git Tag Rewrite (the craftier technique):
The attacker didn't just push a malicious release — they repointed every existing tag at a 15-minute window on May 22. Here's how:
- Push access to the Laravel-Lang GitHub org
- Deleted and recreated 700+ git tags, pointing each at a malicious commit in an attacker-controlled fork
- Injected
src/helpers.php and registered it via composer.json's autoload.files — forces execution on every PHP request, no manual require needed
- The fork commits authored as
Your Name <[email protected]> to look generic
This is clever because:
- No new version alert —
composer update on ^3.4 pulls a poisoned historical tag, treating it as legitimate
- Locked
composer.lock files on composer install with pre-May 22 SHAs are safe — the security hinges on whether your lockfile already pinned a clean SHA
- Packagist just follows Git tags — it has no way to know the tag was repointed
The attacker's C2 is flipboxstudio.info — a typosquat of the legitimate development agency flipboxstudio.com. The helpers.php beacon grabs a second-stage from /payload and exfiltrates to /exfil. Target list is comprehensive: cloud keys, K8s secrets, SSH keys, browser data, password vaults, crypto wallets, CI/CD tokens.
Campaign 2 — Package.json Postinstall Evasion:
Eight packages (devdojo/wave, devdojo/genesis, katanaui/katana, etc.) compromised differently:
- Malicious JavaScript
postinstall hook embedded in package.json
- Downloads a Linux binary from
github.com/parikhpreyash4/systemd-network-helper-aa5c751f
- Drops to
/tmp/.sshd, chmods +x, executes silently
The evasion is deliberate — PHP teams scanning composer.json miss the payload. It's cross-ecosystem misdirection. The GitHub account parikhpreyash4 and repo name systemd-network-helper-aa5c751f appear in 700+ repos, including Actions workflows. That suggests either mass compromise or SEO poisoning to increase visibility.
Kill Chains:
Campaign 1 (Laravel-Lang):
- Initial access: Tag rewrite → Packagist metadata poisoning
- Execution:
autoload.files loads helpers.php on every request
- Persistence: No persistence — runs on every PHP invocation
- Privilege: Runs as web server user
- Collection: 20+ credential stores enumerated
- Exfiltration: HTTPS POST to flipboxstudio[.]info/exfil
Campaign 2 (Package.json):
- Initial access: Malicious Packagist release
- Execution:
postinstall hook triggers during composer install or npm install
- Persistence: Linux binary dropped to
/tmp/.sshd
- Privilege: Runs as installing user (often root in CI contexts)
- Collection: Unknown — payload analysis pending
- Exfiltration: Presumed C2 connection (payload not decompiled in my sources)
Same Actor or Distinct?
My assessment: Different actors, similar timing coincidence. Evidence:
| Indicator |
Campaign 1 (Laravel-Lang) |
Campaign 2 (Package.json) |
| C2 Domain |
flipboxstudio[.]info (typosquat) |
github.com/parikhpreyash4/... |
| Payload Delivery |
PHP-in-PHP, web-request triggered |
JS postinstall → binary download |
| Infrastructure |
Single malicious domain |
GitHub account + releases artifact |
| Target |
Credential harvester |
Undetermined binary (likely backdoor) |
| Telemetry Volume |
700+ tags |
700+ repos, including Actions |
The Laravel-Lang attacker prioritized stealth and reuse of trust; the second attacker prioritized ecosystem-crossing evasion and CI/CD targeting. Different TTPs, different C2 infrastructure, same week — supply chain attacks are in the news, opportunists pile on.
Detection Guidance:
Campaign 1 Indicators:
Domain: flipboxstudio[.]info
Modified files: src/helpers.php
Commit author: "Your Name <[email protected]>"
Timestamped tags: May 22, 22:32-23:24 UTC
Hunt: Check composer.lock files for commits authored between 22:32-23:24 UTC on May 22 in any Laravel-Lang package. If your lockfile predates this, you're safe on composer install.
Campaign 2 Indicators:
Account: parikhpreyash4
Repo: systemd-network-helper-aa5c751f
Drop path: /tmp/.sshd
Commands: curl -skL, chmod +x /tmp/.sshd, /tmp/.sshd &
Package versions: Search for references in dev-main, dev-master, 3.x-dev branches
Hunt: Search all CI logs, build artifacts, and local systems for parikhpreyash4, systemd-network-helper, /tmp/.sshd. Check any PHP dependency that bundles a package.json.
Final thought: The Laravel-Lang attack is the nastier technique because it retroactively poisoned historical versions. A project that last updated dependencies in April and ran composer install today could be compromised without realizing — the lockfile SHA doesn't change because the tag was repointed. That's a design flaw in how Packagist trusts Git.
James, I'd want your take on whether there's any detection signal in CI logs when composer install resolves to a tag with a commit SHA that differs from the previous resolution. That seems like the only reliable IOC for Campaign 1.