
Forschungs-Repository, das BlueFrag (CVE-2020-0022) Android-Bluetooth-Heap-Overflow-Experimente dokumentiert, einschließlich GDB-Crash-Analyse und memcpy-Exploitation-Versuchen.
Anscheinend haben Android 9-6 ein ähnliches Bluetooth-Subsystem, Android 5 und 4 sind unterschiedlich.
Android 9.0
BlueFrag-Experimente
Patch:
https://android.googlesource.com/platform/system/bt/+/3cb7149d8fed2d7d77ceaa95bf845224c4db3baf
Unten habe ich die gepatchte Bedingung erreicht. OK, ich denke, ich habe es verstanden, aber irgendwie kann ich den Prozess nicht zum Absturz bringen.
hmmmm

Tatsächlich ist es gelungen, einen vorzeichenbehafteten Längenwert an memcpy() zu übergeben```
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
Still kein Absturz, aber sollte.....
Im obigen Beispiel, mit einer memcpy-Größe von -3, wird dieser Wert als vorzeichenlose Ganzzahl (4294967293) interpretiert und das memcpy läuft weiter, bis ein Seitenfehler aufgrund von nicht zugeordnetem Speicher auftritt und der Prozess beendet werden sollte.
Mein Telefon in 32 Bit, vielleicht liegt es daran. Mobiltelefon ist Samsung S3 Neo+. Verwendet jemalloc zumindest bei Android 9.0-Tests.```
¯\_(ツ)_/¯
Nun, es sieht korrekt aus

Ich vermute, du musst viele Verbindungen öffnen (für einige Zeit) und irgendwie viel Speicher allokieren, bevor es abstürzt.
Wir schieben hier 4294967293, fast 4GB``` ¯_(ツ)_/¯
Swing und leommxj entdeckten dieses merkwürdige Verhalten von 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
(Übersetzt aus dem Chinesischen)
Es betrifft möglicherweise auch Android 9. Werde es überprüfen.
Tatsächlich kann es sein, dass dies nicht im Prozesskontext läuft, sondern möglicherweise im Interrupt-Kontext. Dann könnte der Fehler
verborgen bleiben.