+---------------------------------------------------------+ | XADV-2013002 glibc 2.5 <= reloc types to crash bug | +---------------------------------------------------------+ Vulnerable versions: - glibc 2.5 <= Not vulnerable versions: - glibc 2.6 >= Testbed: linux distro Type: Local Impact: crash Vendor: https://www.gnu.org/software/libc Author: x90c Site: x90c.org ========= ABSTRACT: ========= [Unspecified reloc types bug] 'defaults:' label codes on If not defined RTLD_BOOTSTRAP, glibc 2.5 defined RTLD_BOOTSTRAP default. The elf_machine_rel() of the vulnerable glibc 2.5 ld-2.5.so doesn't process 'defaults:' In the symbol relocation time. It means the ELF object 4bytes altered with unspecified reloc types to crash. ('defaults:' label process unspecified reloc types to calc reloc addr) The vulnerable function sets *reloc_addr_arg as 5rd argument (to reloc addr). and calc reloc addr. The unspecified reloc types passed Improper value(on elf binary) on reloc_addr. An elf binary with altered unspecified reloc_types to crash. BUG! The bug can be used for rootkit technique via altering the ELF object. ========= DETAILS: ========= glibc-2.5/dl-machine.h ---- auto inline void __attribute ((always_inline)) elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, const Elf32_Sym *sym, const struct r_found_version *version, void *const reloc_addr_arg) { // reloc_addr = reloc_addr_arg(5rd argument as relative jump) Elf32_Addr *const reloc_addr = reloc_addr_arg; .. switch (r_type) { case R_386_GLOB_DAT: case R_386_JMP_SLOT: // *reloc_addr(*relocation addr) = value(relative addr calculated at above codes.) *reloc_addr = value; break; } // XXX BUG: 'defaults:' label not exists! .. } #endif /* !RTLD_BOOTSTRAP */ ---- =============== EXPLOIT CODES: =============== Altering reloc types on the ELF binary. ============= PATCH CODES: ============= add 'defaults:' label on above relocation code If RTLD_BOOTSTRAP defined. =============== VENDOR STATUS: =============== 2012/09/04 - The bug Discovered. 2013/10/20 - Advisory released on full-disclosure, bugtraq, exploit-db. ============== ANNOUNCEMENT: ============== Underground Hacker Scene of south korea In 2013 In the region south korea, korean hacker community 'korean underground' kidz Is there. The korean underground opened three global hacker conferences. x90c is THE L33T In 2004~2013 who not In the korean underground. Except The l33t, all hackers In south -korea was/are In the korean underground. Check it out http://www.x90c.org/profile.txt. ============ DISCLAIMER: ============ The authors reserve the right not to be responsible for the topicality, correctness, completeness or quality of the information provided in this document. Liability claims regarding damage caused by the use of any information provided, including any kind of information which is incomplete or incorrect, will therefore be rejected.