k blijf altijd weer verbaasd hoeveel sommige (nog jonge) hackers weten. Deze bug zelf gevonden? Overigens, als je elk willekeurig geheugen adres kunt decrementen, dan zullen er toch veel meer mogelijkheden zijn voor privilege escalation?
De techniek om deze bug te triggeren komt van ilja (een mede netrican en collega

Dit type bug komt voor op meerdere platformen en op meerdere plekken. (Openbsd/Netbsd/Freebsd/Solaris/Linux)
Ik heb in de tty layer van linux nog meer van dit soort bugs gevonden.
De techniek wordt binnenkort in een presentatie gedisclosed. (waar ik het overigens niet helemaal mee eens ben
Er zijn inderdaad veel meer manieren om dit te exploiten; alleen het mooie van de IDT approach is dat het compleet zonder kernel symbols kan; de instructie 'sidt' kan iedere userland applicatie uitvoeren om het base address te achter halen... Het probleem als je bijv. direct je uid wil decrementen is dat je het address van de task struct niet weet. Je zou bijv. ook een syscall in de systemcall table naar userland kunnen laten pointen, maar ook dit address kan je zonder kernel symbols niet weten. Opzich zou de kernel kunnen checken of interrupt niet naar userland pointed, maar dit is niet echt de oplossing; in eerste instantie mag een userland applicatie niet op deze manier data manipuleren in kernelland.
De idt is btw ook een evil manier om een machine te backdooren; je kan bijv. je eigen int 0x80 handler instaleren en zo system calls redirecten. De standaard tooltjes als chkrootkit checken alleen of de systemcall table nog in tact is en zullen dus niks zien.
Een makkelijkere manier om dit te verhelpen is imho het gebruik van managed code (Java, .NET). Programmeurs zullen toch altijd fouten blijven maken en voor de meeste applicaties heeft managed code geen nadelen, maar wel voordelen.
Dit zou inderdaad heel veel standaard security bugs verhelpen. (stack/heap/whatever overflows, formatstring bugs) (logic bugs/race conditions blijf je behouden)
Punt is natuurlijk wel dat het in plain c altijd wat sneller zal zijn. Voor sommige applicaties maakt dat niet uit; maar voor kernels of webservers kan dit heel veel uitmaken.
De meeste webservers worden zo efficient mogelijk geschreven; threading/multiplexing (select/poll, epoll, kqueue, etc) daar zou de overhead van java de boel alleen maar vertragen.