
Repositório de pesquisa documentando experimentos de heap overflow no Bluetooth do Android com BlueFrag (CVE-2020-0022), incluindo análise de crash no GDB e tentativas de exploração de memcpy.
Parece que o Android 9-6 tem um subsistema Bluetooth semelhante, o Android 5 e 4 são diferentes.
Android 9.0
Experimentos do BlueFrag
Patch:
https://android.googlesource.com/platform/system/bt/+/3cb7149d8fed2d7d77ceaa95bf845224c4db3baf
Abaixo eu atingi a condição corrigida. OK, acho que entendi, mas de alguma forma não consigo travar o processo.
hmmmm

Na verdade, consegui obter o valor de comprimento assinado para memcpy()```
02-16 01:44:49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch reassemble_and_dispatch
02-16 01:44:49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch partial_packet->offset 40 packet->len 304 HCI_ACL_PREAMBLE_SIZE 4
02-16 01:44:49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch projected_offset 340 partial_packet->len 41
02-16 01:44:49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch got packet which would exceed expected length of 41. Truncating.
02-16 01:44:49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch memcpy packet->len 1 packet->offset 4 expr -3
02-16 01:44:49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch partial_packet->data 0xacb14580 partial_packet->data + partial_packet->offset 0xacb145a8 packet->data 0xa553e110 packet->data + packet->offset 0xa553e114
02-16 01:44:49.097 6423 6469 W bt_hci_packet_fragmenter: fragment_and_dispatch fragment_and_dispatch
Ainda sem crash, mas deveria.....
No exemplo acima, com um tamanho de memcpy de -3, esse valor é interpretado como um inteiro sem sinal (4294967293) e o memcpy continua até ocorrer uma falha de página devido a memória não mapeada e o processo deveria terminar.
Meu telefone em 32 bits, talvez seja por isso. O celular é um Samsung S3 Neo+. Usando jemalloc pelo menos nos testes do Android 9.0.```
¯\_(ツ)_/¯
Bem, parece correto

Suspeito que você tenha que abrir muitas conexões (por algum tempo) e de alguma forma alocar muita memória antes que ele trave.
Estamos empurrando aqui 4294967293, quase 4GB``` ¯_(ツ)_/¯
Swing e leommxj descobriram este comportamento estranho do Android 8:
https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fbestwing.me%2FAndroid-8.1-memcpy-func.html
(Traduzido do chinês)
Possivelmente também afeta o Android 9. Vou verificar.
Na verdade, pode ser que isto não seja executado em contexto de processo, mas talvez em contexto de interrupção. Então talvez a falha possa
estar oculta.