Das npm-Paket “tw-pkgprobe-7731” präsentierte sich in seiner ersten Version als legitime Untersuchung im Rahmen eines Bug-Bounty-Programms. “Die erste Version von tw-pkgprobe-7731 gab sich als autorisierte Sicherheitsforschungs-Probe aus”, schreibt ReversingLabs-Forscherin Lucija Valentić in ihrem Bericht. Kommentare im Paket bezeichneten es als “autorisierte Bug-Bounty-Forschungsprobe (Twilio-HackerOne-Programm)”, die “nur innerhalb der Serverless-Packager-Sandbox von Twilio läuft” und “lokalen Prozess- und Host-Kontext sammelt und neben sich selbst ablegt; keine zerstörerische Aktion”.
Tatsächlich prüft das Paket beim Start, ob es sich in einer Twilio-Entwicklungsumgebung befindet, und beendet sich andernfalls sofort. Fällt die Prüfung positiv aus, liest es Umgebungsvariablen sowie Systemdetails wie Mounts, temporäre Verzeichnisse und diverse Konfigurationen aus. Die gesammelten Informationen wandern anschließend über einen Webhook nach außen.
Die Versionen 1.0.1, 1.0.2 und 1.0.3 richteten sich enger gegen Entwickler, die Twilio-APIs nutzen: Sie suchten nach Ordnern, die bestimmten Twilio-Account-String-Identifiern (SIDs) zugeordnet sind. Existierte ein Ordner mit einem bestimmten SID-Namen, unterblieb jede Aktion. “Andernfalls, wenn passende Zielordner gefunden wurden, durchsuchte es installierte npm-Pakete und node_modules, um ein eigenes npm-PoC-Paket einzuschleusen, und legte darin package.json und index.js an”, erläutert ReversingLabs.
Mit Version 1.0.4 kam die Funktion hinzu, process.env.ACCOUNT_SID und process.env.AUTH_TOKEN abzuziehen. Damit wären die Twilio-Zugangsdaten des Opfers kompromittiert – ein Angreifer könnte laut den Forschern Abrechnungen autorisieren und Kommunikation auslösen.
Ungewöhnlich ist der weitere Verlauf: Die letzten drei Versionen 1.0.8, 1.1.0 und 1.1.1 “kehrten zum einfachen Probing-Profil des Pakets zurück, wie es in Version 1.0.0 zu sehen war”, und ließen die schädlichen Funktionen der Zwischenversionen fallen. Die beiden letzten Ausgaben betrieben zusätzlich Informationssammlung aus offenen Quellen, indem sie verschiedene Twilio-bezogene Hosts abfragten, darunter support-api.us1.twilio[.]com, kafka-ui.au1.twilio[.]com und litellm.ai-services.corp.twilio[.]com. Auch AWS-Metadaten unter “169.254.169[.]254/latest/meta-data/” wurden abgerufen.
Wegen dieser Richtungswechsel bleibt offen, worauf die Kampagne letztlich zielte und ob sie tatsächlich im Rahmen eines Bug-Bounty-Programms veröffentlicht wurde. ReversingLabs verweist jedoch darauf, dass die Paketversionen die auf HackerOne gelisteten Vorgaben von Twilio für Sicherheitsforschung nicht einhielten. “Mit anderen Worten: Diese Pakete verstoßen klar gegen die grundlegenden Richtlinien für Sicherheitsforschung, die Twilio aufgestellt hat, was auf bösartige Absicht schließen lässt”, so Valentić.
Der Akteur habe zwar versucht, schädliche Funktionen in einzelnen Releases zwischen scheinbar harmlosem Code zu verstecken, sich darüber hinaus aber kaum Mühe gegeben. “Es gibt keine Verschleierung, kein Typosquatting und keinen Versuch, das veröffentlichende npm-Konto legitim erscheinen zu lassen – Taktiken, die wir in früheren Kampagnen regelmäßig gesehen haben”, schreibt Valentić. Das deute auf einen wenig versierten Angreifer hinter der gegen Twilio-Entwickler gerichteten Kampagne hin.
