
Технический анализ и доказательство концепции для CVE-2024-48990, уязвимости повышения привилегий в needrestart, позволяющей локальным злоумышленникам выполнять произвольный код от имени root через манипуляцию PYTHONPATH.
Чтобы определить, нужно ли перезапускать процесс Python (процесс, выполняющий интерпретатор Python), needrestart извлекает переменную окружения PYTHONPATH из /proc/pid/environ этого процесса (в строке 193), устанавливает эту переменную окружения, если она существует (в строке 196), и выполняет Python ("$ptable->{exec}" в строке 203) с аргументом "-" для чтения короткого, жёстко заданного скрипта из stdin (в строке 204):
К сожалению, если процесс Python принадлежит локальному злоумышленнику, needrestart выполняет Python (в строке 203) с контролируемой злоумышленником переменной окружения PYTHONPATH, что позволяет злоумышленнику выполнить произвольный код с правами root (даже несмотря на то, что жёстко заданный Python-скрипт needrestart в строке 204 вообще не контролируется злоумышленником). Это CVE-2024-48990.