Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
LoongBleed — Proof-of-concept, демонстрирующий микроархитектурную утечку данных в процессорах Loongson LA464/LA664 через неопределённые старшие биты векторных регистров LASX, аналогично ZenBleed. | Kitploit
Инструменты/GitHubGitHub/jiegec/loongbleed
Безопасность встроенных системАнализ уязвимостейЭксплуатацияАппаратный ХакингАппаратная БезопасностьСтатьи и ИсследованияОбучение и Образование
GitHubjiegec/loongbleed

LoongBleed

Proof-of-concept, демонстрирующий микроархитектурную утечку данных в процессорах Loongson LA464/LA664 через неопределённые старшие биты векторных регистров LASX, аналогично ZenBleed.

Репозиторий
171 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

LoongBleed

中文

LoongBleed — это аппаратная уязвимость, концептуально схожая с ZenBleed (CVE-2023-20593) — затрагивающая процессоры Loongson LA464/LA664, реализующие одновременно LSX (128-битный SIMD) и LASX (256-битный SIMD).

В LoongArch регистры LSX $vr (128-битные) являются псевдонимами младшей половины регистров LASX $xr (256-битных). Инструкции LSX и базовые операции с плавающей запятой определены только для работы с младшими 128 битами (или их подмножеством); старшие биты соответствующего регистра $xr не определены. Однако из-за микроархитектурного дефекта эти операции могут утекать данные через старшие 128 бит $xr, раскрывая конфиденциальные данные через границы привилегий или между SMT-соседями.

Примечание о независимом обнаружении — Тот же самый аппаратный дефект был независимо обнаружен и опубликован исследователями из CISPA Helmholtz Center for Information Security как LoongLeak (https://loongleakattack.com/), представленный на USENIX Security 2026 как "LoongLeak: Architectural Cross-Privilege-Boundary Data Leakage on LoongArch CPUs". Наша работа была выполнена независимо от команды LoongLeak; обе группы пришли к одному выводу, что процессоры Loongson LA464/LA664 утекают данные через неопределённые старшие биты регистров LASX $xr. Отметим, что инструкции, которые мы используем для вызова утечки, не идентичны тем, что описаны в статье LoongLeak: наш PoC опирается на другой набор гаджетов (vor.v, vld, fld.d, fld.s) для воспроизведения того же самого аппаратного дефекта. Более того, поскольку утечка может быть вызвана чисто регистровыми инструкциями, такими как vor.v (без загрузки из памяти), наш анализ позволяет предположить, что первопричина, вероятно, заключается в повторном использовании физических регистров: старшие биты повторно используемого физического регистра не очищаются, что приводит к утечке устаревших данных от предыдущего владельца регистра. Это отличается от анализа в статье LoongLeak, которая приписывает утечку данных кэшу данных L1.

Хронология

  • 2026-05-12 — Уязвимость была передана в Loongson.
  • 2026-06-09 — Loongson подтвердила, что это независимое обнаружение уже известной уязвимости.
  • 2026-08-17 — Loongson официально опубликовала объявление об уязвимости LoongLeak (официальное объявление).
  • 2026-08-18 — Этот репозиторий был опубликован.

Как это работает

Доказательство концепции работает следующим образом:

  1. Загрузить данные, состоящие из нулей, в регистр $xrN с помощью xvld.
  2. Выполнить инструкцию (LSX или базовую операцию с плавающей запятой), которая должна затрагивать только младшие 128 бит (или их часть).
  3. Сохранить полный 256-битный регистр обратно с помощью xvst.
  4. Сравнить все 256 бит с исходным значением. Если старшие или младшие 128 бит отличаются от ожидаемого нулевого значения, произошла утечка.

PoC многократно выполняет этот гаджет для 16 архитектурных векторных регистров ($xr0–$xr15) в потоках, привязанных к физическим ядрам. Ненулевые значения, которые появляются после инструкции, указывают на то, что микроархитектура перенесла устаревшие или межконтекстные данные в архитектурное состояние регистров.

Гаджеты

PoC поддерживает несколько тестовых инструкций, выбираемых с помощью --gadget:

На LA664 все четыре гаджета вызывают утечку, утекая не более 192 бит на вектор. На LA464 утекают vld, fld.d и fld.s (не более 224 бит на вектор); гаджет по умолчанию vor.v не вызывает утечку на LA464.

Использование

root@kitploit:~
Usage: ./loongbleed_poc [OPTIONS]

Options:
  -a, --all                Launch one thread pinned to each physical core.
                           By default only thread on CPU 0 is launched.
  -g, --gadget [vor|vld|fld.d|fld.s]
                           Use different instructions for testing.
  -h, --help               Show this help and exit.

Примеры

root@kitploit:~
# Single-thread mode on CPU 0
./run.sh

# Single-thread mode with vld gadget (required for LA464)
./run.sh --gadget vld

# All physical cores, default gadget
./run.sh -a

# All cores with fld.d gadget
./run.sh --all --gadget fld.d

Сценарии атаки

LA664 (например, Loongson 3C6000/D)

Поток-жертва обрабатывает конфиденциальные данные на одном логическом CPU, в то время как PoC проверяет регистры на его SMT-соседе. Поток-шпион может наблюдать фрагменты данных жертвы в утёкших старших битах.

root@kitploit:~
# Terminal 1 — start LoongBleed on CPU 0
./run.sh

# Terminal 2 — victim workload on the SMT sibling (CPU 1)
while true; do numactl -C 1 sort < /etc/shadow > /dev/null; done

Для автоматической настройки используйте предоставленный скрипт:

root@kitploit:~
./poc_la664.sh

Он запускает нагрузку sort на CPU 1 (SMT-соседе CPU 0) и запускает LoongBleed на CPU 0 с гаджетом по умолчанию.

LA464

Поток-жертва обрабатывает конфиденциальные данные на CPU, в то время как PoC проверяет регистры на том же ядре. Требуется --gadget vld, поскольку гаджет по умолчанию vor.v не вызывает утечку на LA464.

root@kitploit:~
# Terminal 1 — start LoongBleed on CPU 0
./run.sh --gadget vld

# Terminal 2 — victim workload on the same core
while true; do numactl -C 0 sort < /etc/shadow > /dev/null; done

Для автоматической настройки:

root@kitploit:~
./poc_la464.sh

Он запускает нагрузку sort на CPU 0 и запускает LoongBleed с --gadget vld.

Сборка

PoC — это однофайловая программа на C++ без внешних зависимостей.

root@kitploit:~
g++ -std=c++11 -O2 -march=native -pthread -o loongbleed_poc loongbleed_poc.cpp

Или используйте предоставленный скрипт:

root@kitploit:~
./run.sh
# or, on LA464:
./run.sh --gadget vld

Интерпретация вывода

Когда обнаружена утечка и утёкшие байты содержат последовательность как минимум из 8 подряд идущих печатных ASCII-символов (0x20–0x7e), PoC выводит:

root@kitploit:~
[cpu   0] LEAK chunk=14 data=0x7461646e756f4620_6572617774666f53_0000000000000000_0000000000000000 ascii=............Software Foundat
  • cpu — логический CPU, к которому привязан обнаруживший поток
  • chunk — какой из 16 слотов векторных регистров ($xr0–$xr15) вызвал срабатывание
  • data — полное 256-битное значение, считанное из $xrN после инструкции, отображаемое как data3_data2_data1_data0, где:
    • data0 = биты [63:0] (младшие 64 бита результата)
    • data1 = биты [127:64] (старшие 64 бита младшей 128-битной половины)
    • data2 = биты [191:128] (младшие 64 бита старшей 128-битной половины)
    • data3 = биты [255:192] (старшие 64 бита старшей 128-битной половины)
  • ascii — печатная интерпретация утёкшего 28-байтового окна (байты 4–31 результата, т.е. старшие 224 бита минус младшие 32 бита). Непечатаемые байты отображаются как ..

Любое ненулевое значение в старших 128 битах (data2 или data3) указывает на микроархитектурную утечку данных.

Как это было обнаружено

Уязвимость была обнаружена при чтении статьи Chips and Cheese "Loongson's LSX and LASX Vector Extensions". В статье отмечалось, что векторные инструкции могут оставлять после себя остаточные случайные данные. Это привело нас к гипотезе, что переименование регистров может не очищать регистры — механизм, аналогичный ZenBleed — что теоретически позволило бы утекать данные из пространства ядра. Затем мы провели эксперименты для проверки этой гипотезы; утечка действительно происходит и воспроизводится как на Loongson 3A5000, так и на 3A6000.

Отказ от ответственности

Этот проект предоставлен исключительно в образовательных целях и для исследований в области безопасности.

Скачать инструмент
ГаджетИнструкцияОписаниеУтечка на LA664Утечка на LA464
vorvor.v $vrN, $vrN, $vrNПобитовое ИЛИ $vrN с самим собойДаНет
vldvld $vrN, …128-битная загрузка из памяти в $vrNДаДа
fld.dfld.d $fN, …64-битная загрузка с плавающей запятой в $fN (псевдоним младших 64 бит $vrN)ДаДа
fld.sfld.s $fN, …32-битная загрузка с плавающей запятой в $fN (псевдоним младших 32 бит $vrN)ДаДа