Disclose the bind-credential collision the latin1 read closed #17

Merged
lilleman merged 1 commits from latin1-disclosure into main 2026-09-21 10:19:11 +02:00
Showing only changes of commit e2edd7e31e - Show all commits
+9 -2
View File
@@ -9,8 +9,15 @@
- Addresses, ids and every other text field on the wire are read and written as latin1. A - Addresses, ids and every other text field on the wire are read and written as latin1. A
`source_addr` of `Kaffeé` previously reached the application as `Kaffei`, because the codec wrote `source_addr` of `Kaffeé` previously reached the application as `Kaffei`, because the codec wrote
the octet and then masked bit 7 reading it back; `destination_addr`, `system_id`, `message_id`, the octet and then masked bit 7 reading it back; `destination_addr`, `system_id`, `message_id`,
`service_type` and the C-Octet String TLVs were affected the same way. A character past `U+00FF` `password`, `service_type` and the C-Octet String TLVs were affected the same way. A character past
in one of those fields is now refused, where it used to go out as its low octet. `U+00FF` in one of those fields is now refused, where it used to go out as its low octet.
**A server comparing `systemId` or `password` could be impersonated.** Masking bit 7 folded 127 of
the 255 non-zero octets onto a character a low octet also reaches, so the bind credentials your
`authenticate` received were not unique to the octets the peer sent: one refused as `admin` could
bind as `\xE1dmin` and match the same string. latin1 is one-to-one over the octets, so two
different wire values no longer arrive as one. Read 0.5.0 bind logs for a `systemId` you did not
issue.
**Check what you stored before you roll this out.** Values your application persisted under 0.5.0 **Check what you stored before you roll this out.** Values your application persisted under 0.5.0
were read with bit 7 masked, so an address or a `message_id` carrying an octet above `0x7F` is were read with bit 7 masked, so an address or a `message_id` carrying an octet above `0x7F` is