Matumizi Mabaya ya Mitiririko ya Media za Android & Vichambuzi vya Picha
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.
Uwasilishaji: Programu za Ujumbe ➜ MediaStore ➜ Vichambuzi vyenye Ruhusa za Juu
Tengenezo za OEM za kisasa huendesha mara kwa mara media indexers zenye ruhusa ambazo hupitia tena MediaStore kwa ajili ya vipengele vya “AI” au vya kushiriki. Kwenye firmware za Samsung kabla ya patch ya Aprili 2025, com.samsung.ipservice inaanzisha Quram (/system/lib64/libimagecodec.quram.so) na huichambua moja kwa moja faili yoyote ambayo WhatsApp (au programu nyingine) inaweka ndani ya MediaStore. Kwa vitendo mshambuliaji anaweza kutuma DNG iliyofichwa kama IMG-*.jpg, kusubiri mwenye kuathirika kubonyeza “download” (bonyeza moja), na huduma yenye ruhusa itachambua payload hiyo hata ikiwa mtumiaji hajawahi kufungua galeri.
$ file IMG-2025-02-10.jpeg
TIFF image data ...
$ exiftool IMG-2025-02-10.jpeg | grep "Opcode List"
Opcode List 1 : [opcode 23], [opcode 23], ...
Vidokezo muhimu
- Usambazaji unategemea upya-uchambuzi wa media ya mfumo (si mteja wa chat) na hivyo unatambua ruhusa za mchakato huo (ufikiaji wa kusoma/kuandika kikamilifu kwa galeri, uwezo wa kuangusha media mpya, n.k.).
- Kila image parser inayofikika kupitia
MediaStore(vision widgets, wallpapers, AI résumé features, n.k.) inakuwa inafikika kwa mbali ikiwa mshambulizi anaweza kumshawishi lengo kuhifadhi media.
Hitilafu za Interpreter ya Opcode ya Quram DNG
DNG files zinaweka orodha tatu za opcode zinazotumika katika hatua tofauti za decode. Quram inakopia API ya Adobe, lakini handler yake ya Stage-3 kwa DeltaPerColumn (opcode ID 11) inamwamini mshambulizi kuhusu mipaka ya plane.
Mipaka ya plane yasiyofaa katika DeltaPerColumn
- Washambulizi wanaweka
plane=5125naplanes=5123ingawa picha za Stage-3 zinaonyesha tu plane 0–2 (RGB). - Quram hubadilisha
opcode_last_plane = image_planes + opcode_planesbadala yaplane + count, na kamwe haishtaki kama safu ya plane iliyopatikana inafaa ndani ya picha. - Kwa hivyo loop inaandika delta kwenye
raw_pixel_buffer[plane_index]kwa offset ambayo mshambulizi anaweza kudhibiti kabisa (mfano, plane 5125 ⇒ offset5125 * 2 bytes/pixel = 0x2800). Kila opcode inaongeza thamani ya 16-bit float (0x6666) kwenye eneo lengwa, ikitoa primitive ya kuongeza OOB kwenye heap yenye usahihi.
Kugeuza ongezeko kuwa uandishi wa hiari
- Exploit kwanza inaharibu Stage-3
QuramDngImage.bottom/rightkwa kutumia operesheni 480 zaDeltaPerColumnzilizoathirika ili opcodes za baadaye zikaone kuratibu kubwa kama ziko ndani ya mipaka. MapTableopcodes (opcode 7) kisha zimeelekezwa kwenye mipaka feki hiyo. Kwa kutumia jedwali la uingizaji lenye namba zote sifuri auDeltaPerColumnyenye deltas-Inf, mshambulizi anafanya sifuri eneo lolote, kisha anatumia deltas za ziada kuandika thamani sahihi.- Kwa sababu vigezo vya opcode viko ndani ya metadata ya DNG, payload inaweza kuandika mamia ya maelfu ya uandishi bila kugusa kumbukumbu ya mchakato moja kwa moja.
Kuunda heap chini ya Scudo
Scudo huweka allocations kwa makundi kwa ukubwa. Quram kwa bahati nzuri inateua vitu vifuatavyo zikiwa na ukubwa sawa wa vipande vya 0x30-byte, kwa hivyo vinakaa katika eneo hilo hilo (pengo la 0x40-byte kwenye heap):
QuramDngImagedescriptors for Stage 1/2/3QuramDngOpcodeTrimBoundsand vendorUnknownopcodes (ID ≥14, including ID 23)
Exploit inapanga allocations ili kuweka vipande kwa ufanisi:
- Stage-1
Unknown(23)opcodes (20,000 entries) zinaspray vipande vya 0x30 ambavyo baadaye vinafungwa. - Stage-2 inaweka huru opcodes hizo na kuweka
QuramDngImagempya ndani ya eneo lililofunguliwa. - Entries 240 za Stage-2
Unknown(23)zinafungwa, na Stage-3 mara moja inateuaQuramDngImageyake pamoja na raw pixel buffer mpya ya ukubwa sawa, ikitumia nafasi hizo. - Opcode iliyoundwa
TrimBoundsinaendesha kwanza katika orodha 3 na inateua raw pixel buffer nyingine kabla ya kufungua hali ya Stage-2, kuhakikisha karibu “raw pixel buffer ➜ QuramDngImage”. - Entries 640 za ziada za
TrimBoundszimewekwaminVersion=1.4.0.1hivyo dispatcher inaziruka, lakini vitu vinavyoweka nyuma yao vinabaki vimetekwa na baadaye vinakuwa malengo ya primitive.
Mchakato huu unaweka raw buffer ya Stage-3 mara moja kabla ya Stage-3 QuramDngImage, hivyo overflow inayotokana na plane inageuza nyanja ndani ya descriptor badala ya kusababisha crash ya hali nasibu.
Kutumia tena Vendor “Unknown” Opcodes kama Data Blobs
Samsung inaacha high bit iliyowekwa katika vendor-specific opcode IDs (kwa mfano, ID 23), ambayo inamwambia interpreter ili allocate muundo lakini kuruka utekelezaji. Exploit inatumia vitu hivyo vilivyo lala kama heaps zinazoendeshwa na mshambulizi:
- Opcode list 1 na 2
Unknown(23)entries hutumika kama scratchpads zinazoendelea kuhifadhi bait za payload (JOP chain at offset 0xf000 na shell command at 0x10000 relative to the raw buffer). - Kwa sababu interpreter bado inawatendea kila kitu kama opcode wakati list 3 inaposindika, kumiliki vtable ya kitu kimoja baadaye inatosha kuanza kutekeleza data za mshambulizi.
Kutengeneza MapTable Bandia & Kupitia ASLR
MapTable objects ni kubwa kuliko TrimBounds, lakini mara mpangilio ukozeaji unapoingia, parser inasoma kwa furaha vigezo ziada nje ya mipaka:
- Tumia linear write primitive kuharibu sehemu ya pointer ya vtable ya
TrimBoundsna jedwali la uingizaji laMapTablelililotengenezwa ambalo linachora byte 2 za chini kutoka vtable yaTrimBoundsjirani kwenda vtable yaMapTable. Bytes za chini pekee zinatofautiana kati ya builds za Quram zinazotumika, hivyo jedwali moja la 64K linaweza kushughulikia matoleo saba ya firmware na kila slide ya ASLR ya 4 KB. - Rekebisha mabaki ya nyanja za
TrimBounds(top/left/width/planes) ili kitu kijae kamaMapTablehalali wakati kitatumika baadaye. - Endesha opcode bandia juu ya kumbukumbu iliyofanywa sifuri. Kwa sababu pointer ya jedwali la uingizaji kwa kweli inarejelea vtable ya opcode nyingine, bait za pato zinakuwa leaked anuani za kiwango cha chini kutoka
libimagecodec.quram.soau GOT yake. - Tumia mapass ya ziada ya
MapTablekubadilisha leaks hizo za vitengo viwili kuwa offsets kuelekea gadgets kama__ink_jpeg_enc_process_image+64,QURAMWINK_Read_IO2+124,qpng_check_IHDR+624, na libc’s__system_property_getentry. Washambulizi kwa ufanisi wanajenga tena anwani kamili ndani ya eneo lao la opcode bila APIs za native memory disclosure.
Kuzindua mabadiliko ya JOP ➜ system()
Mara gadget pointers na shell command vinapowekwa ndani ya spray ya opcode:
- Wimbi la mwisho la uandishi la
DeltaPerColumnlinaongeza0x0100kwa offset 0x22 ya Stage-3QuramDngImage, likisogeza pointer ya raw buffer kwa 0x10000 hivyo sasa inarejelea kamba ya amri ya mshambulizi. - Interpreter inaanza kutekeleza mwisho wa
Unknown(23)opcodes 1040. Entry iliyoharibika ya kwanza ina vtable yake iliyobadilishwa na jedwali bandia kwenye offset 0xf000, hivyoQuramDngOpcode::aboutToApplyinaletaqpng_read_data(ingizo la 4) kutoka kwenye jedwali bandia. - Gadgets zilizokatika hufanya: kupakia pointer ya
QuramDngImage, kuongeza 0x20 ili kuonyesha pointer ya raw buffer, kui-referenzisha, kunakili matokeo ndani yax19/x0, kisha kuruka kupitia GOT slots zilizorekebishwa kwendasystem. Kwa kuwa pointer ya raw buffer sasa ni sawa na kamba ya mshambulizi, gadget ya mwisho inatekelezasystem(<shell command>)ndani yacom.samsung.ipservice.
Vidokezo kuhusu Aina za Allocator
Kuna familia mbili za payload: moja imeandaliwa kwa jemalloc, nyingine kwa scudo. Zinatofautiana katika jinsi blocks za opcode zinaporatibiwa ili kupatikana ukaribu lakini zinashiriki primitives zile zile za mantiki (DeltaPerColumn bug ➜ MapTable zero/write ➜ bogus vtable ➜ JOP). Quarantine iliyozimwa ya Scudo inafanya matumizi ya freelist ya 0x30-byte kuwa deterministic, wakati jemalloc inategemea udhibiti wa size-class kupitia sizing ya tile/subIFD.
Marejeleo
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.
HackTricks

