Невидимые символы: Чем нулевой байт опасен для системы (и почему с ним борются)
В мире текстовых файлов и строк мы привыкли видеть буквы, цифры и пробелы. Но есть один символ, который невидим, не печатается, но может вызывать огромные проблемы в программах и системах: нулевой байт (NULL character, \0).
▪️ В чем его магия (и опасность)?
В языках программирования C и C++ (на которых написано ядро Linux, множество утилит и системных библиотек) строки традиционно заканчиваются первым встреченным нулевым байтом. Это фундаментальное правило.
▪️ Что происходит, если кто-то подсунет его не туда?
Если программа ожидает строку, а в середине получает \0, она просто обрежет строку в этом месте. Это может привести к:
Обходу безопасности:
Представьте, что вы проверяете путь к файлу: /var/www/site/index.php.
Злоумышленник посылает: /var/www/site/index.php%00.jpg (где %00 — это нулевой байт).
Программа видит только /var/www/site/index.php (из-за нулевого байта), думает, что это безопасно, и выполняет файл как PHP-скрипт, хотя по расширению он выглядит как изображение.
Неожиданному поведению:
Система генерирует имя пользователя admin%00user.
В одной части системы оно распознается как admin, в другой — как admin%00user. Это может открыть лазейки для повышения привилегий.
Ошибкам и сбоям:
Некоторые функции могут просто «зависнуть», если получат неожиданный \0, поскольку ожидают конец строки в другом месте.
▪️ Где его ищут?
Современные языки программирования (Python, Go, Rust, Java) активно борются с проблемами нулевого байта, часто явно запрещая его в середине строк или обрабатывая иначе. Но системные утилиты и низкоуровневые API все еще могут быть уязвимы.
🧠 Для админа: Знание о нулевом байте помогает понимать, почему некоторые фильтры ввода так важны, и почему «непечатаемые символы» в именах файлов или полях форм могут быть не просто ошибкой, а попыткой атаки.
#Security #Linux #Programming #Exploit #SysAdmin #FunFact
В мире текстовых файлов и строк мы привыкли видеть буквы, цифры и пробелы. Но есть один символ, который невидим, не печатается, но может вызывать огромные проблемы в программах и системах: нулевой байт (NULL character, \0).
▪️ В чем его магия (и опасность)?
В языках программирования C и C++ (на которых написано ядро Linux, множество утилит и системных библиотек) строки традиционно заканчиваются первым встреченным нулевым байтом. Это фундаментальное правило.
▪️ Что происходит, если кто-то подсунет его не туда?
Если программа ожидает строку, а в середине получает \0, она просто обрежет строку в этом месте. Это может привести к:
Обходу безопасности:
Представьте, что вы проверяете путь к файлу: /var/www/site/index.php.
Злоумышленник посылает: /var/www/site/index.php%00.jpg (где %00 — это нулевой байт).
Программа видит только /var/www/site/index.php (из-за нулевого байта), думает, что это безопасно, и выполняет файл как PHP-скрипт, хотя по расширению он выглядит как изображение.
Неожиданному поведению:
Система генерирует имя пользователя admin%00user.
В одной части системы оно распознается как admin, в другой — как admin%00user. Это может открыть лазейки для повышения привилегий.
Ошибкам и сбоям:
Некоторые функции могут просто «зависнуть», если получат неожиданный \0, поскольку ожидают конец строки в другом месте.
▪️ Где его ищут?
Современные языки программирования (Python, Go, Rust, Java) активно борются с проблемами нулевого байта, часто явно запрещая его в середине строк или обрабатывая иначе. Но системные утилиты и низкоуровневые API все еще могут быть уязвимы.
🧠 Для админа: Знание о нулевом байте помогает понимать, почему некоторые фильтры ввода так важны, и почему «непечатаемые символы» в именах файлов или полях форм могут быть не просто ошибкой, а попыткой атаки.
#Security #Linux #Programming #Exploit #SysAdmin #FunFact