Уразливості в apport та systemd-coredump: ризик для Linux-систем

Уязвимості в apport та systemd-coredump: ризик для Linux-систем

Компанія Qualys виявила дві уразливості в інструментах apport (CVE-2025-5054) та systemd-coredump (CVE-2025-4598), що використовуються для обробки core-файлів після аварійного завершення процесів. Ці уразливості дозволяють отримати доступ до core-файлів, збережених після аварійного завершення suid-додатків або системних фонових процесів, у пам’яті яких можуть міститися облікові дані або ключі шифрування.

Утиліта apport автоматично викликається для збереження core-дампів в Ubuntu, а systemd-coredump — у Red Hat Enterprise Linux 9+, Fedora та багатьох інших дистрибутивах Linux.

Деталі атаки на core-дампи Linux

Дослідники продемонстрували техніку атаки, під час якої створювалися умови для аварійного завершення suid-додатка unix_chkpwd та отримання доступу до core-файлу з дампом стану під час краху. У збереженому core-дампі були присутні хеші паролів користувачів системи, що залишалися в пам’яті після завантаження вмісту /etc/shadow.

Можливість експлуатації уразливостей продемонстрована в Ubuntu 24.04 та Fedora 40/41, однак імовірно, що й інші дистрибутиви вразливі до подібних атак.

Механізм уразливостей в обробниках core-дампів

Обидві уразливості викликані станом перегонів, що дозволяє підмінити аварійно завершений suid-процес на інший процес. Підміна відбувається після початку обробки ядром аварійного завершення, але до перевірки обробником у просторі користувача параметрів процесу через /proc/pid/files.

Виклик apport та systemd-coredump здійснюється так: ядро, отримавши інформацію про аварійне завершення процесу, викликає обробник, вказаний у файлі /proc/sys/kernel/core_pattern, після чого передає йому вміст core-дампа через вхідний потік.

Процес атаки на apport

Генерація core-дампа та запуск обробника відбувається не миттєво, цього часу достатньо для підміни процесу. У разі підміни запущений обробник вважатиме, що збій стався в звичайному користувацькому додатку, і збереже core-файл з доступом для звичайного користувача.

Атака на apport складається з таких кроків:

  • Відгалужується новий процес і викликається функція execve() для запуску suid-програми, такої як unix_chkpwd.
  • Пропускається час, необхідний для завантаження конфіденційних даних у пам’ять.
  • До завершення виконання команди процесу надсилається сигнал SIGSEGV або SIGSYS для аварійного завершення.
  • Ядро формує core-дамп і запускає процес apport для обробки.
  • Після запуску apport, але до початку розбору, аварійно завершеному процесу надсилається сигнал SIGKILL, а сам процес замінюється на інший без прапорця suid.
  • apport підключається до unix-сокету і надсилає файловий дескриптор для доступу до core-дампа.

Особливості атаки на systemd-coredump

З одного боку, атака на systemd-coredump простіша, оскільки немає необхідності підміняти процес в окремому просторі користувача. З іншого боку, systemd-coredump написаний мовою C і запускається швидко, що дає менше часу для підміни порівняно з apport, написаним на Python.

Проте, системи зі systemd-coredump більш вразливі через те, що при налаштуванні виклику не вказується прапорець “%d”, що дозволяє атакувати фонові процеси з правами root.

Рекомендації щодо захисту та оновлення

Для тимчасового блокування уразливостей рекомендується вимкнути збереження core-дампів для suid-програм, встановивши параметр /proc/sys/fs/suid_dumpable у значення 0.

Для повноцінного усунення проблеми потрібно внести зміни в ядро Linux, що реалізує можливість передачі інформації про аварійно завершений процес через механізм pidfd.

Крім того, варто стежити за публікацією оновлень пакетів у своєму дистрибутиві та встановлювати їх одразу після виходу.