Уязвимость в musl даёт root-доступ на Alpine: всё дело в звёздочке

*sshole, or when are we going to get rid of C?

Уязвимость в musl даёт root-доступ на Alpine: всё дело в звёздочке

В ядре C-кода снова нашлась дыра: в musl libc функция crypt возвращает строку "*" для слишком длинного пароля, а на Unix "*" издавна означает заблокированную учётную запись. Вместе с хешированием попыток входа для заблокированных аккаунтов это позволяет неаутентифицированному пользователю получить shell, возможно root, на системах без PAM — например, на официальном образе Alpine для AWS. Автор объясняет, почему в Rust такое маловероятно: дело не в типах, а в нормах сообщества.

Инженерные нормы разработчиков на C допускают, что "*" — приемлемое сигнальное значение, обозначающее ошибку; инженерные нормы разработчиков на Rust этого просто не допускают.
  1. PeterWhittaker

    Это не столько проблема C, сколько неудачное проектное решение команды musl. В ответ на плохие практики (программисты не проверяют, что вернул crypt) они создали, возможно, ещё худшую (возврат сигнального значения).

    Конечно, std::result в Rust может затруднить написание глупостей, но глупость всегда найдёт способ.

  2. zeroCalories

    Просто я реально ненавижу время компиляции Rust, чувак

  3. varispeed

    При чём тут C? Это просто плохой дизайн.

    Это как винить плохое вождение в спортивном костюме.

Ещё за этот день

2026-11-06