Entwicklung & Code
Schadsoftware weiter aktiv: GlassWorm erneut in Open-VSX-Paketen gefunden
Der Mitte Oktober entdeckte Supply-Chain-Angriff über die Marktplätze von Visual Studio Code geht offenbar weiter: Auf dem Open-VSX-Marktplatz der Eclipse Foundation sind drei weitere Pakete mit GlassWorm aufgetaucht.
Weiterlesen nach der Anzeige
Die Pakete setzen auf dieselben Verschleierungstechniken und nutzen dieselben Angriffsmuster wie die im Oktober gefundenen Packages. Kurz nach dem Bekanntwerden des Angriffs hatte die Eclipse Foundation ihn offiziell als abgeschlossen erklärt und zusätzliche Sicherheitsmaßnahmen angekündigt.
Die drei Anfang November gefundenen Pakete ai-driven-dev.ai-driven-dev, adhamu.history-in-sublime-merge und yasuyuky.transient-emacs kommen laut dem Security-Unternehmen Koi gemeinsam auf knapp 10.000 Downloads.
Wiederum setzt der Angriff auf die Solana-Blockchain und verwendet Folgen von Unicode-Zeichen, die viele Editoren nicht anzeigen. Auch auf GitHub finden sich Hinweise auf Schadsoftware mit denselben Mustern.
Der unsichtbare Glaswurm
Den Namen GlassWorm hatte Koi der Schadsoftware im Oktober gegeben, da sie zum einen im Editor unsichtbar ist und sich zum anderen selbst vermehren soll – ähnlich wie die im September auf npm gefundene Schadsoftware Shai Hulud.
Allerdings vermehrt der GlassWorm sich nicht eigenständig, sondern greift lediglich Credentials unter anderem zu GitHub ab, die die Angreifer vermutlich mit KI-Unterstützung nutzen, um die Schadsoftware zu verteilen.
Die Malware enthält nicht nur wie üblich verschleierten Code, sondern setzt auf Unicode-Zeichen, die im Editor nicht sinnvoll darstellbar sind – und daher oft überhaupt nicht dargestellt werden. Dafür verwendet sie Folgen von Unicode-Variantenselektoren. Das Resultat ist für menschliche Reviewer unsichtbar. Diff-Betrachter und ähnliche Tools zeigen die eigentlichen Unterschiede ebenfalls nicht an, weisen aber darauf hin, dass Unterschiede bestehen. Hinzu kommt, dass ein kleines Codestück sichtbar sein muss, um den restlichen, versteckten Code zu dekodieren und auszuführen.
Weiterlesen nach der Anzeige
Blockchain für die C2-Infrastruktur
Dank der Solana-Blockchain ist die Infrastruktur für die Command-and-Control-Server resilient gegen das Abschalten einzelner Server. Die Schadsoftware besorgt sich über die öffentliche Blockchain Links im Base64-Format auf den Payload mit der eigentlichen Schadsoftware.
Auf die Weise können die Angreifer jederzeit den C2-Server austauschen und die neue Adresse über die Blockchain veröffentlichen.
Auch auf GitHub aktiv
Der GlassWorm ist laut dem Koi-Blog nun auch auf GitHub aufgetaucht. Maintainer haben gemeldet, dass ihre Repositories vermutlich KI-generierte, auf den ersten Blick zum Projekt passende und legitime Commits erhalten haben, die Code mit den Angriffsmustern von GlassWorm enthalten, der ebenfalls unsichtbar ist.
Im Blogbeitrag heißt es, dass die Commits auf GitHub Private Use Areas nutzen, also für den eigenen Gebrauch ausgewiesene Unicode-Zeichen. Damit soll der Code ebenfalls unsichtbar werden, was wir aber in eigenen Versuchen nicht nachvollziehen konnten.
Russische Gruppe hinter den Angriffen vermutet
Laut dem Koi-Blog haben die Angreifer nach einem Tipp eines Security-Forschers, der anonym bleiben will, einen Endpunkt auf ihrem Server ungesichert gelassen. Koi hat die Lücke genutzt, um Daten auszulesen.
Dort fanden sie Informationen zu den vom Angriff betroffenen Unternehmen und Organisationen, darunter eine staatliche Einrichtung aus dem Nahen Osten.

Die Daten enthalten russische Texte und einen Verweis auf RedExt.
(Bild: Koi)
Interessanterweise waren laut Koi auch Keylogger-Daten des Angreifers in den Daten zu finden. Aus ihnen lässt sich unter anderem ablesen, dass die Angreifer Russisch sprechen und das Command-and-Control-Framework RedExt verwenden.
Koi hat die Informationen an die Strafverfolgungsbehörden weitergegeben, um die Opfer zu informieren und gegen die Angreifer vorzugehen.
(rme)
Entwicklung & Code
fish 4.2.0: Mehrzeilige Befehle und UTF-8 als Standard
Die Entwickler der Shell fish haben Version 4.2.0 veröffentlicht. Zu den wichtigsten Neuerungen zählen mehrzeilige Befehle in der verlaufsbasierten Autovervollständigung sowie grundlegende Änderungen bei der Zeichenkodierung.
Weiterlesen nach der Anzeige
Die Autovervollständigung auf Basis der Befehlshistorie schlägt nun auch mehrzeilige Kommandos vor – eine Funktion, die bei komplexeren Shell-Skripten oder verschachtelten Befehlen für viele Nutzer im Alltag praktisch ist. Zudem wurden Probleme beim Löschen mehrzeiliger transienter Prompts behoben: Wenn ein solcher Prompt mehr Zeilen umfasst als der finale Prompt, wird er jetzt korrekt entfernt.
Ein weiteres praktisches Feature betrifft die Terminal-Konfiguration: Anwender können jetzt den Titel des Terminal-Tabs getrennt vom Fenstertitel setzen, indem sie die Funktion fish_tab_title definieren – gut für den Überblick. Bei sehr langen Kommandozeilen blendet fish außerdem den Teil des mehrzeiligen Prompts aus, der aufgrund der Bildlaufposition nicht mehr sichtbar ist. Das verhindert doppelte Zeilen nach dem Neuzeichnen.
UTF-8 jetzt vorausgesetzt
Eine grundlegende Änderung betrifft die Zeichenkodierung: fish geht jetzt immer von UTF-8 aus, selbst wenn das System kein UTF-8-Locale konfiguriert hat. Eingabebytes, die kein gültiges UTF-8 darstellen, werden weiterhin korrekt verarbeitet – Dateipfade mit veralteten Kodierungen lassen sich also nach wie vor verwenden, werden aber möglicherweise anders auf der Kommandozeile dargestellt. Auf Systemen ohne Multi-Byte-Locale verzichtet fish künftig auf ASCII-Ersatzzeichen für Unicode-Symbole wie das Auslassungszeichen.
Die Mausbedienung wurde flexibler: fish deaktiviert nicht mehr zwangsweise die Mauserfassung (DECSET/DECRST 1000), sodass Nutzer per Mausklick den Cursor bewegen oder Vervollständigungsvorschläge auswählen können. Die Tastenkombination alt-p fügt zudem kein überflüssiges Leerzeichen mehr zur Kommandozeile hinzu.
Standalone-Build nun Standard
Weiterlesen nach der Anzeige
Für Distributoren und Entwickler ist relevant, dass der Standalone-Build-Modus jetzt standardmäßig aktiv ist. Die Dateien in $CMAKE_INSTALL_PREFIX/share/fish werden künftig nicht mehr verwendet – mit Ausnahme der HTML-Dokumentation. Dadurch brechen künftige Updates laufende Shells nicht mehr ab, wenn sich interne Hilfsfunktionen geändert haben. Die Datendateien werden vorerst redundant installiert, um bereits laufende Shells zu schützen. Die minimale unterstützte Rust-Version wurde auf 1.85 geändert.
Release-Tags und Quellcode-Archive sind nun wieder GPG-signiert. Die Dokumentation in den Release-Paketen wird jetzt mit der aktuellen Sphinx-Version erstellt, wodurch die vorgenerierten Man-Pages OSC-8-Hyperlinks enthalten. Die Sphinx-Abhängigkeit ist jetzt in pyproject.toml spezifiziert, wodurch Nutzer uv für den Dokumentations-Build einsetzen können.
Plattform-spezifische Verbesserungen
Unter macOS setzt fish als Login-Shell die Variable MANPATH nun korrekt, wenn diese bereits in der Umgebung vorhanden war. Ein Windows-spezifisches Problem, bei dem die webbasierte Konfiguration nicht startete, wurde ebenfalls behoben. Für MSYS2 gibt es einen Workaround für Konsole und WezTerm, der verhindert, dass diese das falsche Arbeitsverzeichnis beim Öffnen neuer Tabs verwenden.
Im Rahmen der Version 4.0, die im Februar 2025 erschien, hatten die fish-Entwickler den Kerncode von C++ nach Rust portiert. Release 4.2.0 behebt mehrere Regressionen aus den Vorgängerversionen 4.0.0 und 4.1.0, darunter Probleme mit der webbasierten Konfiguration unter Python 3.9, falsche Terminal-Modi bei bestimmten Kommandos und Fehler beim Speichern universeller Variablen unter MSYS2. Auch VTE-basierte Terminals zeigen beim Ändern der Fenstergröße wieder das korrekte Verhalten.
Schließlich wurden auch die Übersetzungen erweitert: Neben den bereits vorhandenen Sprachen ist nun Chinesisch (Taiwan) mit an Bord, zudem wurden die französischen Übersetzungen ergänzt. Die Release Notes auf GitHub listen alle Änderungen detailliert auf. Für Linux stehen Standalone-Binaries für verschiedene CPU-Architekturen bereit, macOS-Pakete können über Homebrew bezogen werden. Windows-10- und -11-Nutzer müssen das Windows Subsystem for Linux (WSL) heranziehen, darüber hinaus lässt sich fish mit Cygwin und MSYS2 verwenden.
(fo)
Entwicklung & Code
Software Testing: Mensch vs. Maschine – wer urteilt fairer?
Bei Richard Seidl ist in dieser Episode Sam Goetjes zu Gast. Die beiden sprechen über Vertrauen, Vorurteile und Fairness in algorithmischen Entscheidungen. Ausgangspunkt ist Goetjes‘ Masterarbeit: Ein Bewerbungsszenario mit menschlichen und maschinellen Empfehlungen und gezielt gesetztem Gender-Bias. Die Studie zeigt, wie sich das Vertrauen über die Zeit verschiebt und der Algorithmus oft schneller Vertrauen erhält.
Weiterlesen nach der Anzeige
Für Tests heißt das: nicht nur Modelle messen, sondern Bias-Risiken beobachten, Datenquellen offenlegen und Pilotphasen sauber designen. Agil gedacht heißt es, Feedback-Schleifen ernst zu nehmen und Entscheidungen überprüfbar zu machen.
Bei diesem Podcast dreht sich alles um Softwarequalität: Ob Testautomatisierung, Qualität in agilen Projekten, Testdaten oder Testteams – Richard Seidl und seine Gäste schauen sich Dinge an, die mehr Qualität in die Softwareentwicklung bringen.
Die aktuelle Ausgabe ist auch auf Richard Seidls Blog verfügbar: „Mensch vs. Maschine: Wer urteilt fairer? – Sam Goetjes“ und steht auf YouTube bereit.
(mai)
Entwicklung & Code
Sanierungsfälle: Erfolgreiche Strategien gegen Projektchaos
(Bild: Andreas Monschau )
Andreas Monschau ist als Senior IT-Consultant bei Haeger Consulting in Bonn tätig. In Kundenprojekten hat er verschiedene Rollen ausgeübt, die vom Softwareentwickler über den Softwarearchitekten hin zum Testmanager, Teamleiter sowie Anforderungsmanager reichten. Nebenbei leitet er das umfangreiche Traineeprogramm von Haeger Consulting und unterstützt andere Unternehmen beim Aufbau gleichartiger Prozesse.
Es könnte so schön sein: Als neues Teammitglied wendet man sich einem Softwareprojekt zu, alle wissen, was sie zu tun haben, die Anforderungen sind klar und verständlich und das Team beherrscht die Technik (und nicht umgekehrt). Gibt es doch mal Probleme, dann kümmern sich eigens dafür vorgesehene Rollen darum, und räumen die Schwierigkeiten beiseite. Die Organisation sorgt dafür, dass alle in Ruhe arbeiten können. Am Ende hat man dann eine Sache ganz gewiss erreicht: Anwender beziehungsweise Kunden erhalten ein Produkt mit echtem Mehrwert. Das klingt doch zu schön, um wahr zu sein!
Weiterlesen nach der Anzeige
Aber ist es nicht häufig so, dass man als neues Teammitglied in ein Softwareprojekt hineingerät, und eben nicht alle wissen, was sie zu tun haben, und die Anforderungen ebenso wie die Technik unbeherrschbar sind? Mit den Problemen steht man häufig alleine da, Kunden und Anwenderinnen erhalten schließlich kein Produkt mit Mehrwert, und Projektziele erreicht das Team nur unzureichend.
Dazu gibt es tatsächlich Statistiken wie der Standish Group Chaos Report aus dem Jahre 2020. Die Teilnehmenden der zugrunde liegenden Umfragen waren überwiegend IT-Führungskräfte von Dienstleistern aus verschiedenen Branchen wie Banken, Versicherungen, Fertigung, Einzelhandel, Gesundheitswesen sowie aus öffentlichen Einrichtungen auf lokaler, staatlicher und föderaler Ebene. Dabei bezieht sich der Report auf den globalen Markt.
Die Zahlen besagen, dass 31 Prozent aller Softwareprojekte erfolgreich verlaufen, das heißt, die Projekte bleiben innerhalb der Zeitplanung, innerhalb des Budgets und liefern am Ende den besagten Mehrwert für die Anwender beziehungsweise Kunden. Aber was ist mit den restlichen 69 Prozent? Die Hälfte der Projekte haben zumindest enorme Probleme verschiedenster Art (u. a. wird das Budget überschritten), und 19 Prozent scheitern vollständig, das heißt sie kommen nicht zu einem befriedigenden Ende, und verursachen ausschließlich Kosten.
Im Fokus dieses Artikels stehen eben diese Projekte, die zu den 50 Prozent gehören, die Projekte, die (noch) nicht vollständig gescheitert sind, aber auch noch nicht auf gutem Kurs – also Sanierungsfälle, die man wieder in die richtige Richtung drehen kann. Und richtige Richtung bedeutet: Am Ende wird den Kunden tatsächlich ein Produkt mit Mehrwert geliefert.
Welche Faktoren führen zu Problemen?
Es gibt sehr viele Faktoren, die (nicht nur) in Softwareprojekten zu Problemen führen können. In Sanierungsfällen stößt man häufig unter anderem auf folgende Herausforderungen:
Weiterlesen nach der Anzeige
- Unklare Anforderungen: Der Kunde ist nicht in der Lage, das, was er haben will, klar zu artikulieren, wodurch Anforderungen widersprüchlich oder unbrauchbar sind. Immer neue Sonderfälle führen zum gefürchteten Scope Creep: Die schleichende Ausweitung des Projektumfangs, wobei häufig weder Zeit noch Budget oder Ressourcen entsprechend angepasst werden.
- Unrealistische Deadlines: Den Kunden werden Lieferzeitpunkte von Features versprochen, ohne vorher mit dem Entwicklungsteam gesprochen zu haben. Das Team kann jedoch nicht rechtzeitig liefern, weil es zu viel zu tun gibt. Dadurch entsteht Unzufriedenheit, und auf Dauer leidet die Qualität der Software, da das Team nebenbei immer neue Brandherde löschen muss.
- Strukturlose Agilität: Es wird viel von agilen Methoden oder agilen Transformationen gesprochen, aber die Umsetzung erfolgt oft nur halbherzig. Prioritäten ändern sich täglich, weil man „agil arbeitet“, und aus dem gleichen Grund existiert auch keine langfristige Planung. Stakeholder beginnen, sich in Meetings und kurzfristigen Planungen einzumischen, da sie das Gefühl haben, die Kontrolle zu verlieren.
- Unkontrolliert eskalierende technische Schulden: Aus Zeitgründen wird schnell etwas implementiert, und „wir verbessern das später“ ist das Mantra innerhalb des Projekts. Die Zahl von Workarounds und Quickfixes steigt, und irgendwann verbringen Entwicklerinnen und Entwickler mehr Zeit damit, über den Code und das Projekt zu fluchen, als neue Features zu implementieren. Davor haben sie ohnehin Angst, denn jede Codeänderung kann unvorhersehbare Konsequenzen mit sich bringen.
- Politik und Machtkämpfe: Es gibt viele Projektbeteiligte, die etwas zu sagen haben, was dazu führt, dass es häufig lange dauert, bis Entscheidungen getroffen werden, da niemand für vermeintlich falsche Entscheidungen verantwortlich sein möchte. Es gibt aus dem Management unterschiedliche, teilweise sich widersprechende Anforderungen, und Features werden aus politischen Gründen entwickelt oder blockiert.
Diese Liste lässt sich beliebig fortsetzen und soll nur einen kleinen Eindruck vermitteln, welche Problematiken häufig anzutreffen sind. Oftmals ist es jedoch so, dass sich diese Probleme zunächst verstecken und neuen Mitarbeitenden erst nach einiger Zeit im Projekt auffallen.
Echte Probleme aus echten Projekten
Wie sieht die Praxis aus? Zur Veranschaulichung dienen zwei beispielhafte Sanierungsfälle. Sie zeigen, wie dort eingesetzte Kollegen aus dem Unternehmen des Autors mit den dort vorherrschenden Problemen umgegangen sind.
Ein Disclaimer vorab: Ähnlichkeiten mit „lebenden oder toten Projekten“ sind rein zufällig – niemand sollte sich in einem der Projekte wiedererkennen können, Inhalte und Branchen sind verschleiert, einige Stellen sind überzeichnet, andere vereinfacht. Die zugrundeliegenden Probleme entsprechen jedoch der Realität.
Kaufen, kaufen, kaufen – E-Commerce
Das erste Beispiel führt in den E-Commerce-Sektor. Inhaltlich geht es um das Thema Identitätsmanagement. Grundsätzlich soll die SSO-(Single Sign-on)-Funktionalität von Keycloak, einer Open-Source-Software für Identitäts- und Zugriffsmanagement (Identity and Access Management, IAM) um weitere Services angereichert werden. Als besonderer Bonus: Das Projekt soll annähernd auf der sogenannten grünen Wiese starten – für den Kollegen, der als Lead-Developer fungiert und dem ein neues Team versprochen wird, scheinbar ein Glücksgriff. Bei diesem Sanierungsfall lagen die Probleme allerdings kurz nach Start in das Projekt bereits klar auf der Hand:
Beim versprochenen Entwicklerteam handelte es sich um drei Mitarbeitende, die zwar aus IT-affinen Umfeldern kamen, jedoch nicht über eine klassische Entwicklerausbildung verfügten. Tatsächlich handelte es sich mehr oder weniger um Hobbyprogrammierer, die nie zuvor mit Java Software entwickelt haben, und Java war als Sprache gesetzt.
Diese drei hatten bereits angefangen, etwas zu implementieren, es war jedoch unbrauchbar – sowohl vom Design als auch von der konkreten Codequalität her. Darüber hinaus erwiesen sich die Anforderungen als vollkommen unklar. Unterschiedliche fachliche Ansprechpartner lieferten verschiedene Aussagen, die sich häufig sogar widersprachen. Detailwissen über Prozesse und Use Cases existierte nicht.
Im Projekt gab es niemanden, der die wenigen vorliegenden Anforderungen entgegennahm, um sie für die Entwicklung aufzubereiten und zu priorisieren – in agilen Projekten wäre das etwa ein Product Owner.
So konnte das Entwicklungsteam zunächst nur auf Basis der wenigen bekannten Anforderungen arbeiten, und wenn man den fachlichen Ansprechpartnern den aktuellen Stand zeigte, führte das häufig dazu, dass das Entwicklungsteam wieder zurück in den Code musste, weil (vorher unbekannte) Sonderfälle nicht berücksichtigt wurden.
Zu guter Letzt gab es kein Vorgehensmodell sowie kein wirkliches Projektmanagement. Es gab lediglich das Entwicklungsteam mit einem Lead-Developer und einige am Projekt beteiligte Mitarbeitende, die gelegentlich Aussagen über die Anforderungen machten. Unabhängig davon gab es natürlich ein Management, das Ergebnisse sehen wollte, aber nicht verstehen konnte, warum das Entwicklungsteam nicht vernünftig arbeitet.
-
UX/UI & Webdesignvor 3 MonatenDer ultimative Guide für eine unvergessliche Customer Experience
-
UX/UI & Webdesignvor 2 MonatenAdobe Firefly Boards › PAGE online
-
Apps & Mobile Entwicklungvor 3 MonatenGalaxy Tab S10 Lite: Günstiger Einstieg in Samsungs Premium-Tablets
-
Social Mediavor 3 MonatenRelatable, relevant, viral? Wer heute auf Social Media zum Vorbild wird – und warum das für Marken (k)eine gute Nachricht ist
-
UX/UI & Webdesignvor 3 WochenIllustrierte Reise nach New York City › PAGE online
-
Datenschutz & Sicherheitvor 2 MonatenHarte Zeiten für den demokratischen Rechtsstaat
-
Entwicklung & Codevor 3 MonatenPosit stellt Positron vor: Neue IDE für Data Science mit Python und R
-
Entwicklung & Codevor 2 MonatenEventSourcingDB 1.1 bietet flexiblere Konsistenzsteuerung und signierte Events
