Was haben die JavaScript Pakete left-pad, color, faker und cross-env gemeinsam? Alle waren in npm Package Sicherheits-Incidents involviert.
Wenn man sich die Anzahl von Javascript Abhängigkeiten bei Mittelgroßen Projekten ansieht, ist eine dreistellige Anzahl an JavaScript Paketen nicht unüblich. Das liegt primär an der überschaubaren Größe der Pakete und somit der Funktionalität. Alles nur, um Pakete verwaltbarer zu halten. Doch dieser Umstand macht das JavaScript-Ecosystem so attraktiv für Angreifer oder kann zu extremen Seiteneffekten führen. In dieser Episode sprechen wir drei npm Package Incidents durch, was es damit aufsich hatte, welche Attack-Möglichkeiten es noch gibt und wie man sich als Software Entwickler dagegen schützen kann.
Bonus: Was Bademeister, Blubberwasser und eine ASCII-Repräsentation von Uncle Sam und der amerikanischen Flagge mit JavaScript zu tun haben.
Feedback an stehtisch@engineeringkiosk.dev oder via Twitter an https://twitter.com/EngKiosk
Links
- Film "Die Bademeister": https://www.imdb.com/title/tt0202806/
- Open Source Studien: https://t3n.de/news/wirtschaft-open-source-nutzt-5-1451923/ und https://www.bitkom.org/Presse/Presseinformation/Open-Source-ist-in-der-deutschen-Wirtschaft-angekommen
- Media Tech Lab: https://jump.engineeringkiosk.dev/media-tech-lab
- Buch "Working in Public: The Making and Maintenance of Open Source Software": https://www.amazon.de/Working-Public-Making-Maintenance-Software/dp/0578675862
- Auch Python und PHP sind betroffen: https://twitter.com/s0md3v/status/1529005758540808192 und https://twitter.com/s0md3v/status/1529049336268869633
- JavaScript left-pad: https://www.npmjs.com/package/left-pad
- Messaging-App Kik: https://www.kik.com/
- E-Mail-Verkehr zwsichen npm, Kik und Azer Koçulu zum left-pad Paket: https://medium.com/@mproberts/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d
- Statement vom npm CTO "Laurie Voss" zur Wiederherstellung des left-pads Paket: https://twitter.com/seldo/status/712414588281552900
- Zalgo Text: https://en.wikipedia.org/wiki/Zalgo_text
- Dev corrupts NPM libs 'colors' and 'faker' breaking thousands of apps: https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/
- node-ipc: Open Source Maintainer Sabotages Code to Wipe Russian, Belarusian Computers: https://www.vice.com/en/article/dypeek/open-source-sabotage-node-ipc-wipe-russia-belraus-computers
- typosquatting-Attacke mit npm Paketen (u.a. cross-env): https://snyk.io/blog/typosquatting-attacks/
- Bank pushed privaten Code mit npm: https://twitter.com/seldo/status/1105153287718723584
- 12 Factor App: https://12factor.net/de/
- GitHub DMCA Takedowns: https://github.com/github/dmca
- npm package scopes: https://docs.npmjs.com/about-scopes
- Dependabot: https://github.blog/2020-06-01-keep-all-your-packages-up-to-date-with-dependabot/
- Harden GitHub Actions - Pin actions to a full length commit SHA: https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-third-party-actions
Weitere nicht behandelte Incidents
- ua-parser.js (malicious code / account hijack): https://github.com/advisories/GHSA-pjwm-rvh2-c87w
- coa (malicious code): https://github.com/advisories/GHSA-73qr-pfmq-6rp8
- rc (malicious code): https://github.com/advisories/GHSA-g2q5-5433-rhrf
- purescript (malicious code by dependencies): https://harry.garrood.me/blog/malicious-code-in-purescript-npm-installer/
- event-stream (new maintainer injected code to steal bitcoins / social engineering): https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident
- getcookies (backdoor): https://blog.npmjs.org/post/173526807575/reported-malicious-module-getcookies.html
Sprungmarken
(00:00:00) Intro
(00:00:35) Intro: 10.000 Downloads und Die Bademeister
(00:01:42) Wie viele Firmen setzen (bewusst) Open Source ein?
(00:04:09) Wie viele Firmen unterstützen Open Source finanziell?
(00:06:22) Open Source Funding via Media Tech Lab
(00:08:11) Das Management von Software-Dependencies anhand des JavaScript-Ecosystems via npm
(00:08:59) Warum JavaScript als Beispiel genutzt wird und die Theorie warum JavaScript Pakete so klein sind und viele Abhängigkeiten haben
(00:15:06) npm Package Incident: Das Paket "left-pad" wurde aus der npm Registry entfernt (unpublished)
(00:23:06) npm Package Incident: Die Pakete "color" und "faker" geben Textmüll auf der Konsole aus
(00:27:29) npm Package Incident: Das Paket "cross-env" und der typosquatting-Angriff mit "crossenv"
(00:33:01) Weitere Angriffs-Vektoren in Bezug auf Software Dependencies: Böswilliger Maintainer, Schadcode in Sub-Dependency, Account-Übernahme und die falsche Package Registry
(00:40:23) Ein Lösungsweg: npm package scopes
(00:42:02) Weitere Lösungswege: Schadcode und frühere Fraud-Detection auf Plattform-Seite, die Überwachung von direkten Dependencies und Version-Pinning
(00:47:40) Dependabot: Versionen von Dependencies automatisch updaten und auf neue Dependencies achten
(00:53:44) Der gesunde Streit: Zanken und Bierchen
(00:54:17) Outro
Hosts
- Wolfgang Gassler (https://twitter.com/schafele)
- Andy Grunwald (https://twitter.com/andygrunwald)
Engineering Kiosk Podcast: Anfragen an stehtisch@engineeringkiosk.dev oder via Twitter an https://twitter.com/EngKiosk