Skip to content

Back to the catalog

Supply Chain Attack Targets Laravel-Lang Packages with Credential Stealer
aikido.devwriteup

Supply Chain Attack Targets Laravel-Lang Packages with Credential Stealer

Aikido Security discovered an active supply chain attack against laravel-lang/lang, laravel-lang/attributes, and laravel-lang/http-statuses (233 compromised versions total), where an attacker used GitHub's cross-fork tag feature to point official-looking version tags at commits in a malicious fork, injecting a src/helpers.php dropper that loads via Composer's autoloader. The dropper fingerprints the host, decodes a hidden C2 domain (flipboxstudio[.]info), and fetches a second-stage PHP credential stealer that harvests cloud credentials, Kubernetes/Vault/Docker configs, SSH keys, browser and password-manager vaults, crypto wallets, and VPN configs, exfiltrating AES-256 encrypted data before self-deleting. Aikido reported it to Packagist, which pulled the malicious versions.

TL;DR A malicious fork-and-tag trick pushed a 233-version Composer supply chain attack on laravel-lang, dropping a PHP autoloader-triggered stealer that exfiltrates cloud, dev, browser, wallet and VPN credentials.
Document

What it is

An active supply chain attack (detected May 22, 2026) against three Composer packages: laravel-lang/lang (7.8k stars), laravel-lang/attributes, and laravel-lang/http-statuses. 233 versions were compromised. The malicious code loads automatically via Composer's autoloader, so simply installing an affected version executes it — no application code needs to call it.

How it works

The attacker never pushed malicious commits to the official repos. GitHub lets a version tag point at a commit from a fork of the same repository; the attacker created a controlled fork and pointed the version tags there. So the repo's own history and default branch look clean — you have to inspect what each tag actually resolves to.

The injected src/helpers.php defines two innocuous-looking functions (laravel_lang_locale(), laravel_lang_fallback()), then runs a self-executing block that fingerprints the host and writes a marker file so it fires once. The C2 domain is stored as a runtime-decoded integer array (defeats static string scanning), resolving to flipboxstudio[.]info. The dropper fetches the ~5,900-line stealer from /payload (SSL verification disabled), runs it via a .vbs/cscript launcher on Windows or backgrounded exec() on Linux/macOS, then the stealer AES-256-encrypts its haul, POSTs to /exfil, and self-deletes.

Preconditions / Affected

Any environment that installed one of the 233 compromised versions of the three packages above. On Windows the payload additionally drops a bundled .exe to decrypt Chrome's DPAPI login database and actively decrypts WinSCP passwords, so Windows dev hosts lose more.

What to do

Packagist has removed the malicious versions and temporarily unlisted the packages, but installed environments are already infected — removal upstream does not clean your machine. Treat any host that ran an affected version as fully compromised and rotate everything the stealer targets (cloud keys, SSH/git creds, .env secrets, browser/password-manager vaults, crypto wallets, VPN configs).

Hunt for these indicators:

Network (C2):

flipboxstudio.info
flipboxstudio.info/payload
flipboxstudio.info/exfil

Files/paths (in system temp dir):

<tmp>/.laravel_locale/<md5_hash>            # infection marker
<tmp>/.laravel_locale/<12 hex chars>.php    # dropped stealer
<tmp>/.laravel_locale/<8 hex chars>.vbs     # Windows launcher

Because the stealer self-deletes, absence of the .php/.vbs files does not clear a host — the marker file and any egress to flipboxstudio[.]info are the more durable signals.

Caveats

The affected-package list is given but the specific compromised version numbers are not enumerated on the page (only the count, 233), so assume any recently pinned version is suspect and verify what each installed tag resolves to on GitHub rather than trusting the count.

Organisations named here

  • flipboxstudio.info

Technologies named here

  • laravel-lang/lang
  • Aikido
  • laravel-lang/attributes
  • Aikido Endpoint Protection
  • Aikido Safe Chain
  • laravel-lang/http-statuses
  • 233 versions
  • Composer
  • Packagist
  • PHP
  • Laravel
  • GitHub

Techniques named here

  • Supply chain attack via GitHub tag-to-fork exploitation
  • Composer autoloader abuse
  • Host fingerprinting and single-execution marker
  • String/C2 obfuscation to evade static scanners
  • Payload retrieval with SSL verification disabled
  • Silent execution via platform-specific launchers
  • Credential and secret harvesting
  • DPAPI decryption helper
  • WinSCP password decryption
  • Encrypted exfiltration
  • Self-deletion for anti-forensics

Threat actors named here

  • Unnamed attacker