
Изначально я попытался использовать diff для создания патча. Я пропатчил так, как думал, что должно быть, до того, как увидел настоящий патч. encrypt.patch — это тот самый оригинальный патч, который я сделал с помощью diff. Однако, когда мы попытались применить этот патч к FreeBSD, он не был принят.
Вместо этого нам пришлось загрузить настоящий патч. Затем я изменил патч, чтобы реализовать исправление так, как я изначально считал нужным. Это работает, потому что в патч помещается весь путь.
В патче мы просто проверяем длину по сравнению с MAXLENGTH. Если она больше этого значения, устанавливаем её в 0. Таким образом, это попадает в случай len = 0, который вызывает ошибку. Это исправляет проблему :-)
Вот объяснение, как применить патч в FreeBSD. https://www.freebsd.org/security/advisories/FreeBSD-SA-11:08.telnetd.asc Просто используйте этот патч вместо загрузки настоящего. Он сработает, и вы больше не сможете эксплуатировать переполнение буфера.