flawopen.com/Incidents/xz-utils-backdoor-march-2024
Компрометация XZ Utils (CVE-2024-3094)
CVE-2024-3094 затронула архивы XZ Utils 5.6.0/5.6.1. Риск зависел от сборки дистрибутива; найдите и замените уязвимые пакеты.[1], [3], [4], [5], [6]
Представьте репозиторий исходного кода как открытый рецепт, а архив релиза как запечатанный ящик с ингредиентами. Даже если рецепт выглядит верно, кухня проверяет печать и накладную. Одного названия блюда на ящике недостаточно, чтобы отправить его в производство. Манифест, проверенный по отдельному доверенному каналу, может выявить подмену ящика, но даже действительная подпись поставщика не доказывает безвредность авторизованного ящика: скомпрометированные архивы XZ были официальными релизами. Замените затронутые пакеты по рекомендациям дистрибутива; используйте проверку манифеста только как отдельную меру против подмены.[5], [6]
Ключевые понятия и термины
Архив релиза- Архив исходного кода, опубликованный для установки или пакетирования. Он может отличаться от файлов, полученных из репозитория, поэтому его нужно проверять как отдельный артефакт.[3], [4], [6]
Происхождение сборки- Доказательства того, из какого проверенного исходного кода, каких шагов сборки и от какого издателя получен артефакт. Они помогают решить, можно ли доверять загрузке.[5], [6]
Проверка артефакта- Сопоставление хеша или подписи артефакта с ожидаемым значением, полученным через независимый доверенный канал, до использования в сборке или публикации.
Связи со стандартами
- Ссылка CWE для слабого места, описанного в этом руководстве: CWE-506
Хронология инцидента
Andres Freund публично сообщил о проблеме.[5]
Пошаговый сценарий атаки
Аномалии стали началом расследования
Andres Freund сообщил о необычном использовании CPU и ошибках Valgrind в процессе SSH. Наблюдаемые признаки привели к расследованию и публичному раскрытию.[5]
Реагирование начинается с замены и проверки
Рассматривайте это как инцидент с затронутыми пакетами и происхождением сборки. Следуйте рекомендациям дистрибутива и замените затронутые пакеты. Для будущих артефактов проверяйте происхождение и подписи: это помогает выявить подмену, но не доказывает безвредность авторизованного релиза.[1], [6]
Исходный код: Уязвимый vs Защищённый вариант
# Принимает загруженный вход сборки, не доказывая его идентичность.
from pathlib import Path
def stage_release(artifact: Path, build_inputs: Path) -> None:
build_inputs.joinpath(artifact.name).write_bytes(artifact.read_bytes())
# Успешное копирование не доказывает, что архив соответствует
# проверенному выпуску или доверенному манифесту издателя.# Учебный шлюз: проверяет ожидаемый SHA-256 из доверенного манифеста.
import hashlib
import hmac
from pathlib import Path
def verify_release(artifact: Path, expected_sha256: str) -> None:
digest = hashlib.sha256(artifact.read_bytes()).hexdigest()
if not hmac.compare_digest(digest, expected_sha256.lower()):
raise ValueError("артефакт выпуска не соответствует доверенному манифесту")
# Получайте expected_sha256 через отдельно аутентифицированный процесс выпуска
# и вызывайте verify_release до того, как архив станет входом сборки.
# Это выявляет подмену, но не вредоносный авторизованный релиз; следуйте рекомендациям для затронутых пакетов.Чек-лист по защите системы для инженеров
- ✓Сверяйте загруженные архивы релизов с хешем или подписью, полученными через отдельно аутентифицированный канал; успешная загрузка не доказывает происхождение.[1], [6]
- ✓Для воспроизводимых сборок фиксируйте ревизию исходного кода, среду сборки и хеш артефакта; сравнивайте результаты независимых сборок при обновлении критических зависимостей.
- ✓Проверяйте скрипты сборки, правила пакетирования и тестовые артефакты так же строго, как прикладной код; фиксируйте происхождение и целостность необъяснимых двоичных тестовых данных.
- ✓Требуйте как минимум два одобрения для изменений инструментов релиза, конфигурации CI и шагов пакетирования и сохраняйте отслеживаемые записи.[5], [6]
- ✓Уточняйте реальные затронутые пакеты и версии по уведомлениям поставщика и дистрибутива; после замены повторно проверяйте происхождение.
- ✓Включайте необъяснимое использование CPU, падение производительности и ошибки проверки памяти в процедуру расследования и сохраняйте проверяемые доказательства.[5]
Источники
- NVD — CVE-2024-3094
- MITRE CWE-506
- XZ Utils 5.6.0 — выпуск от 24 февраля 2024 года
- XZ Utils 5.6.1 — выпуск от 9 марта 2024 года
- Andres Freund: исходный отчёт на oss-security
- Проект XZ: заявление об инциденте — архив oss-security
- Shai-Hulud: npm-червь, публиковавший сам себя
- SUNBURST: когда сама сборочная линия стала уязвимостью
- Запись CVE Program — данные CNA Red Hat