Android libcutils库中整数溢出导致的堆破坏漏洞的发现与利用
文章从研究Android图形子系统时发现的一个整数溢出漏洞讲起,这个漏洞存在于libcutils库的native_handle_create函数中。作者龚广(@oldfresher)揭示了,当传入精心构造的numFds和numInts参数时,会导致堆内存分配大小计算溢出,进而引发堆破坏。具体来说,这个漏洞可通过Android图形系统的Binder接口(如IGraphicProducer的setSidebandStream)被低权限进程跨进程触发。 更巧妙的是,作者构建了一条清晰的提权路径:从普通应用出发,必须按顺序依次注入mediaserver、surfaceflinger,最终目标是获得system_server的“半神”权限。摘要中点明了这一“三步走”策略的必要性——每一步获取的权限是攻击下一步的门票。文中还提及了攻击过程需克服的ASLR、SELinux以及je_malloc堆管理器等现实障碍,并以mediaserver注入为例,详细拆解了从控制Binder服务线程到最终代码注入的五个步骤。整篇文章不仅定位了漏洞根源,更完整呈现了从漏洞发现到实现高权限提权的复杂工程化利用全貌。