WLAN-Name macht drahtloses Netzwerk auf iOS dauerhaft unbrauchbar

In heutigen, sehr komplexen Betriebssystemen existieren hunderte unerkannte Sicherheitsmängel – und manchmal werden diese auch zufällig entdeckt. Carl Schou nannte sein drahtloses Netzwerk "%p%s%s%s%s%n" – und als er versuchte, sein iPhone XS mit iOS 14.4.2 mit diesem Netzwerk zu verbinden, schaltete sich einfach das WLAN auf dem Smartphone komplett aus. Über die Systemeinstellungen war es nicht mehr möglich, die WLAN-Funktionalität zu reaktivieren.


Der Hintergrunddienst "wifid" ("WiFi-Daemon") stürzt auf dem Gerät beim Versuch, die WLAN-Funktion wieder zu aktivieren, sofort ab – selbst ein Neustart des iPhones bringt keine Abhilfe.


Erst das Zurücksetzen der Netzwerkeinstellungen in den Systemeinstellungen hilft gegen diesen Fehler – dadurch "vergisst" das iPhone, mit welchen Netzwerken zuerst Verbindungen hergestellt werden sollen. "wifid" übernimmt auf dem iPhone und iPad diverse Funktionen: So ist es beispielsweise nach dem Verbindungsversuch mit dem Netzwerk "%p%s%s%s%s%n" auch nicht mehr möglich, über AirDrop Dateien zu verschicken oder zu empfangen.

Zeichenkettenformatierung und Logging-Dienst schuld
Ein Prozentzeichen hat in Zeichenketten eine besondere Funktion: Es dient als Platzhalter für das Einfügen von Informationen. Will zum Beispiel eine App eine Anzahl von Personen anzeigen, ist die Zeichenkette "%d Personen" hinterlegt. Das "%d" sagt, dass eine Dezimal-Zahl an dieser Stelle erwartet wird. Solche Platzhalter sind dahingehend gefährlich, dass kleine Modifikationen zu ungewollten Speicherzugriffen führen können. Ersetzt man beispielsweise das %d durch ein %@, interpretiert das System den Zahlenwert als Speicheradresse – oder bei "%s" als weitere Zeichenkette.

Genau dies ist hier der Fall: Da der Netzwerkname aus solchen Platzhaltern besteht, interpretiert ein Dienst diese ungewollt. In diesem Fall scheint "wifid" beim Starten die aktuellsten Informationen in der Konsole ausgeben zu wollen – und stürzt ab, da hier unbeabsichtigt die Platzhalter interpretiert werden und es zu einer Speicherschutzverletzung kommt.

Noch kein Angriffsvektor bekannt
Bislang ist das Problem aber noch ein reines Ärgernis, denn einen direkten Angriffsvektor, welcher das Auslesen von Daten oder das Kompromittieren von Systemkomponenten erlaubt, ist bislang nicht bekannt. Es ist davon auszugehen, dass Apple das Problem mit einem baldigen iOS-Update aus der Welt schafft. Sollte es sich tatsächlich nur um eine unbeabsichtigte Auswertung der Platzhalter in WLAN-Netzwerknamen handeln, ist eine Fehlerbehebung für Apple wahrscheinlich leicht umzusetzen.

Kommentare

jmh
jmh21.06.21 09:16
ich habe eher das problem, dass ich nach der rueckkehr aus dem flugmodus nicht mehr so ohne weiteres automatisch eine verbindung zu meinem heimnetzwerk hergestellt bekomme.

jedes verdammte wlan der nachbarschaft ist zu sehen, aber erst einmal nie das eigene. erst mit viel hin- und hergeswitche taucht es dann wieder auf und man kann sich manuell verbinden.

etwas besser funktioniert es hier, wenn ich in den voreinstellungen des iphones die private wlan-adresse deaktiviere.
wir schreiben alles klein, denn wir sparen damit zeit.
-6
OMA
OMA21.06.21 09:27
jmh
ich habe eher das problem, dass ich nach der rueckkehr aus dem flugmodus nicht mehr so ohne weiteres automatisch eine verbindung zu meinem heimnetzwerk hergestellt bekomme.

jedes verdammte wlan der nachbarschaft ist zu sehen, aber erst einmal nie das eigene. erst mit viel hin- und hergeswitche taucht es dann wieder auf und man kann sich manuell verbinden.

etwas besser funktioniert es hier, wenn ich in den voreinstellungen des iphones die private wlan-adresse deaktiviere.

Wahrscheinlich ist der Namensraum des Routers voll und wenn nun dein Gerät ständig mit neuer Adresse ankommt, ist schlicht kein Platz mehr für "neue" Geräte. Prüfe das in deinem Router und lösche alle nicht mehr verwendeten Anmeldungen.
+1
milk
milk21.06.21 09:27
stürzt ab, da hier unbeabsichtigt die Platzhalter interpretiert werden
Es dürfte eher der Fall sein, dass die Signatur der Methode nicht mehr stimmt, weil sie für jeden der %-Parameter ein Argument erwartet, das zur Laufzeit aber fehlt. C halt, das ist eben eine Programmiersprache für Unerschrockene.
0
Wiesi
Wiesi21.06.21 10:15
Die Interpretationsroutine für Stings bedarf wohl noch einiger zusätzlicher Abfragen. Da kann C eigentlich nichts dafür. Trotzdem halte auch ich C für die gefährliche Programmiersprache der Welt, weil die meisten ihrer Laufzeitsysteme aus jedem Programmierfehler eine Katastrophe machen.
Everything should be as simple as possible, but not simpler
+1
Leichtbau
Leichtbau21.06.21 10:23
Wir sind uns alle doch einig, dass der Name eines Netzwerkes nicht als Parameter interpretiert werden sollte, oder?
+8
fleissbildchen21.06.21 10:42
MTN
WLAN-Name macht drahtloses Netzwerk auf iOS dauerhaft unbrauchbar
MTN
das Zurücksetzen der Netzwerkeinstellungen in den Systemeinstellungen hilft gegen diesen Fehler

Clickbait

MTN
Carl Schou nannte sein drahtloses Netzwerk "%p%s%s%s%s%n"

Da sollte die Headline eher lauten "Carl Schou gelang es, iOS WLAN mutwillig zum Absturz zu bringen"
-2
derguteste
derguteste21.06.21 11:31
*Ironie an* Endlich ein Mittel gegen W-Lan-Schmarotzer *ironie aus*
+3
Mendel Kucharzeck
Mendel Kucharzeck21.06.21 11:32
fleissbildchen
Clickbait

Nix da Clickbait. Mit "dauerhaft" ist gemeint, dass danach kein Verbinden mehr mit anderen WLANs mehr möglich ist und das Problem selbst einen Neustart überdauert.

Außerdem: Überleg mal, ein unerfahrener Nutzer verbindet sich mit einem solchen Netzwerk – wahrscheinlich funktioniert der "Hack" nämlich auch mit dem Namen "FreeWiFi %p%s%s%s". Denkst du, der unerfahrene Nutzer kriegt das Problem wieder in den Griff? Für den ist WLAN erstmal gestorben.
+5
coosmannc21.06.21 11:47
Auf so einen Blödsinn muss man erst mal kommen. Wer nennt denn sein WLAN so und wenn, warum?
+4
Colonel Panic
Colonel Panic21.06.21 12:51
Wiesi
Trotzdem halte auch ich C für die gefährliche Programmiersprache der Welt, weil die meisten ihrer Laufzeitsysteme aus jedem Programmierfehler eine Katastrophe machen.

Na, jetzt muß ich doch mal eine Lanze für C brechen. Die Sprache entstand zu einer Zeit, als Ressourcen wie Rechenzeit und Speicherplatz noch extrem knapp waren, und ist deshalb auf Effizienz getrimmt und verzichtet auf viele Sicherheitsabfragen. Sie ist außerdem nach wie vor eine wichtige Grundlage der IT, immerhin sind Betriebssystemkerne und Gerätetreiber weitgehend in C (und C++) geschrieben, eben wegen dieser Effizienz.

Aber ja, man kann sich mit C ganz leicht in den Fuß schießen.

Wäre der wifid in einer anderen Sprache geschrieben, dann wäre er vielleicht mit einer hübschen Exception abgebrochen und nicht mit SIGSEGV. Für den User macht das keinen Unterschied.

Zu dem WLAN-Fehler: Das ist eigentlich die gleiche Fehlerklasse wie SQL-Injection. Eine extern empfangene Zeichenkette darf man NIE ungesäubert als Formatierungs-String verwenden.
+1
fleissbildchen21.06.21 13:02
Mendel Kucharzeck
fleissbildchen
Clickbait

Nix da Clickbait. Mit "dauerhaft" ist gemeint, dass danach kein Verbinden mehr mit anderen WLANs mehr möglich ist und das Problem selbst einen Neustart überdauert.

Außerdem: Überleg mal, ein unerfahrener Nutzer verbindet sich mit einem solchen Netzwerk – wahrscheinlich funktioniert der "Hack" nämlich auch mit dem Namen "FreeWiFi %p%s%s%s". Denkst du, der unerfahrene Nutzer kriegt das Problem wieder in den Griff? Für den ist WLAN erstmal gestorben.

Ja, ok - so gesehen ist das natürlich übel. Dann nehme ich den "Clickbait" also hiermit zurück
+3
Dunkelbier21.06.21 13:16
fleissbildchen
Mendel Kucharzeck
fleissbildchen
Clickbait

Nix da Clickbait. Mit "dauerhaft" ist gemeint, dass danach kein Verbinden mehr mit anderen WLANs mehr möglich ist und das Problem selbst einen Neustart überdauert.

Außerdem: Überleg mal, ein unerfahrener Nutzer verbindet sich mit einem solchen Netzwerk – wahrscheinlich funktioniert der "Hack" nämlich auch mit dem Namen "FreeWiFi %p%s%s%s". Denkst du, der unerfahrene Nutzer kriegt das Problem wieder in den Griff? Für den ist WLAN erstmal gestorben.

Ja, ok - so gesehen ist das natürlich übel. Dann nehme ich den "Clickbait" also hiermit zurück
Also ich finde, ihr habt beide ein bisschen Recht
+1
TiBooX
TiBooX21.06.21 14:53
Toll, jetzt kann man QR-Code-WLAN-Fallen für iOS drucken.

So wie damals die QR-Codes für Android, die statt einer Telefonnummer einen Steuercode zum zurücksetzen/ändern des Passworts enthielten. 3 mal probiert und man durfte nach der verschollen PUK suchen.
In iOS wurden diese korrekt ignoriert.

Man kann nicht immer gewinnen.
People who are really serious about software should make their own hardware [A. Kay]
+1
TiBooX
TiBooX21.06.21 15:00
Wiesi
Die Interpretationsroutine für Stings bedarf wohl noch einiger zusätzlicher Abfragen. Da kann C eigentlich nichts dafür. Trotzdem halte auch ich C für die gefährliche Programmiersprache der Welt, weil die meisten ihrer Laufzeitsysteme aus jedem Programmierfehler eine Katastrophe machen.

Was bitte ist ein Laufzeitsystem für C?
C wird direkt in Maschinensprache übersetzt.
Das Problem hier ist wohl eher der controverse “varargs”-Mechanismus, der Parameter ungeprüft vom Stack holt.
Ja, C ist gefährlich, wenn man nicht diszipliniert programmiert!
Aber es sollte ja auch nur ein Ersatz für die unterschiedlichen Assembler seiner Zeit sein … in den 80ern.
People who are really serious about software should make their own hardware [A. Kay]
0
milk
milk21.06.21 16:00
Colonel Panic
Wäre der wifid in einer anderen Sprache geschrieben, dann wäre er vielleicht mit einer hübschen Exception abgebrochen und nicht mit SIGSEGV. Für den User macht das keinen Unterschied.
Für den Entwickler wäre es vielleicht etwas leichter gewesen, die nicht abgefangene Exception vor der Veröffentlichung der Software zu sehen und ein entsprechendes Error Handling zu schreiben. Das würde dann für den User sehr wohl einen Unterschied machen.

Mit allem anderen hast du Recht.
0
tbaer
tbaer21.06.21 20:19
TiBooX
Toll, jetzt kann man QR-Code-WLAN-Fallen für iOS drucken.

An sowas habe ich nach dem lesen des Artikels auch zuerst gedacht.

Aber die Idee mit „Free WLAN…“ gefällt mir besser. Gegenüber ist eine Imbissbude ohne WLAN. Ob mein WLAN so weit reicht? 😈😈😈
0
gfhfkgfhfk23.06.21 15:36
TiBooX
Aber es sollte ja auch nur ein Ersatz für die unterschiedlichen Assembler seiner Zeit sein … in den 80ern.
C ist älter. C würde für die Portierung von UNIX auf die PDP-11 geschrieben - 1973 erfolgte das
0

Kommentieren

Sie müssen sich einloggen, um die News kommentieren zu können.