Pesquisadores curiosos com exploração de NULL pointers bugs
Essa historia começou um bocado como todas as outras (Quem nao se lembra dos problemas com format string ?) ou seja é descoberta uma falha de segurança num software e a tecnica de exploração introduz um novo conceito de exploitação de bugs tratando-se de gestão de memoria.
Tudo começou por meio duma falha de segurança descoberta no Adobe Flash e divulgada por meio deste paper por um pesquisador. A partir daí alguns pesquisadores chegaram a conclusao de que esta pesquisa pode originar um novo metodo de exploração de falhas em softwares. A falha é da Action Script Virtual Machine que é o motor por detras da interpretação da linguagem Action Script com a qual sao criados aplicativos flash, sendo um factor independente a plataforma em causa.
Vejamos, se um determinado arquivo SWF for manipulado, por meio de alterações ao seu formato constituido por campos chamados de tags, por exemplo a tag DefineSceneAndFrameLabelData (tag ID 0×56) cuja estrutura segue abaixo:
// supporting structures
SceneData
{
UI32 FrameOffset
String SceneName
}
FrameData
{
UI32 FrameNumber
String FrameLabel
}
// Tag structure
DefineSceneAndFrameLabelData
{
RecordHeader Header
UI32 SceneCount
SceneData Scenes[SceneCount]
UI32 FrameCount
FrameData Frames[FrameCount]
}
Notar que RecordHeader e UI32 sao tipos de dados.
Continuando, (Ver um artigo meu sobre tipos de dados avançados) a tag DefineSceneAndFrameLabelData é uma tag cujo tamanho varia e que recebe o inteiro ‘Scene Count’. Existem algumas funções que realizam a valiação de dados como a função “ProcessSFLData” que le o valor ‘Scene Count’ realiza algumas validações basicas e aloca uma estrutura para ler os proximos valores um a um, mas o problema é que nao existe validação para uma falha de alocação de memoria.
Mais informações podem ser encontradas aqui.