CVE-2024-26759: mm/swap: fix race when skipping swapcache
Оценка Noroxi
Приоритет: Наблюдать (оценка срочности 22/100)
- В отслеживаемых источниках (CISA KEV, Exploit-DB, Metasploit, Nuclei, GitHub) нет публичного эксплойта или записей об эксплуатации.
- Вероятность эксплуатации в ближайшие 30 дней: 0,26% (FIRST EPSS).
- Может быть вызвана пользователем с локальным доступом к системе. Достаточно учётной записи с низкими привилегиями. Действия пользователя не требуются. Особые условия не требуются; воспроизводится стабильно.
- Исправленная версия: Linux Linux 13ddaf26be324a7f951891ecd9ccd04466d27458, 2dedda77d4493f3e92e414b272bfa60f1f51ed95, 305152314df82b22cf9b181f3dc5fc411002079a.
- Критичность спорная: CNA оценивает в 7.8, NVD — в 5.5.
- Упоминается в национальных бюллетенях кибербезопасности Турции (siberguvenlik.gov.tr): 1.
Пока низкий приоритет. Обновитесь до Linux Linux 13ddaf26be324a7f951891ecd9ccd04466d27458, 2dedda77d4493f3e92e414b272bfa60f1f51ed95, 305152314df82b22cf9b181f3dc5fc411002079a или новее.
Формируется автоматически по данным записи: CVSS (NVD и CNA), CISA KEV и SSVC, FIRST EPSS, источники эксплойтов, исправленные версии. Как мы считаем
Первоисточники: NVD · CVE.org · FIRST EPSS
In the Linux kernel, the following vulnerability has been resolved: mm/swap: fix race when skipping swapcache When skipping swapcache for SWP_SYNCHRONOUS_IO, if two or more threads swapin the same entry at the same time, they get different pages (A, B). Before one thread (T0) finishes the swapin and installs page (A) to the PTE, another thread (T1) could finish swapin of page (B), swap_free the entry, then swap out the possibly modified page reusing the same entry. It breaks the pte_same check in (T0) because PTE value is unchanged, causing ABA problem. Thread (T0) will install a stalled page (A) into the PTE and cause data corruption. One possible callstack is like this: CPU0 CPU1 ---- ---- do_swap_page() do_swap_page() with same entry <direct swapin path> <direct swapin path> <alloc page A> <alloc page B> swap_read_folio() <- read to page A swap_read_folio() <- read to page B <slow on later locks or interrupt> <finished swapin first> ... set_pte_at() swap_free() <- entry is free <write to page B, now page A stalled> <swap out page B to same swap entry> pte_same() <- Check pass, PTE seems unchanged, but page A is stalled! swap_free() <- page B content lost! set_pte_at() <- staled page A installed! And besides, for ZRAM, swap_free() allows the swap device to discard the entry content, so even if page (B) is not modified, if swap_read_folio() on CPU0 happens later than swap_free() on CPU1, it may also cause data loss. To fix this, reuse swapcache_prepare which will pin the swap entry using the cache flag, and allow only one thread to swap it in, also prevent any parallel code from putting the entry in the cache. Release the pin after PT unlocked. Racers just loop and wait since it's a rare and very short event. A schedule_timeout_uninterruptible(1) call is added to avoid repeated page faults wasting too much CPU, causing livelock or adding too much noise to perf statistics. A similar livelock issue was described in commit 029c4628b2eb ("mm: swap: get rid of livelock in swapin readahead") Reproducer: This race issue can be triggered easily using a well constructed reproducer and patched brd (with a delay in read path) [1]: With latest 6.8 mainline, race caused data loss can be observed easily: $ gcc -g -lpthread test-thread-swap-race.c && ./a.out Polulating 32MB of memory region... Keep swapping out... Starting round 0... Spawning 65536 workers... 32746 workers spawned, wait for done... Round 0: Error on 0x5aa00, expected 32746, got 32743, 3 data loss! Round 0: Error on 0x395200, expected 32746, got 32743, 3 data loss! Round 0: Error on 0x3fd000, expected 32746, got 32737, 9 data loss! Round 0 Failed, 15 data loss! This reproducer spawns multiple threads sharing the same memory region using a small swap device. Every two threads updates mapped pages one by one in opposite direction trying to create a race, with one dedicated thread keep swapping out the data out using madvise. The reproducer created a reproduce rate of about once every 5 minutes, so the race should be totally possible in production. After this patch, I ran the reproducer for over a few hundred rounds and no data loss observed. Performance overhead is minimal, microbenchmark swapin 10G from 32G zram: Before: 10934698 us After: 11157121 us Cached: 13155355 us (Dropping SWP_SYNCHRONOUS_IO flag) [kasong@tencent.com: v4]
- Опубликовано
- 3 апр. 2024 г.
- Обновлено
- 5 авг. 2026 г.
- EPSS
- 0,2 % · 18-й процентиль
- CWE
- CWE-787
Инструменты для отчёта
Оценка срочности
22
Наблюдать
Пока низкий приоритет.
- CVSS
- 22 / 40 · 5.5 / 10
- CISA KEV
- 0 / 30 · Нет в списке
- EPSS
- 0 / 30 · 0,2 %
Решение CISA SSVC
- Эксплуатация
- нет
- Автоматизируемо
- нет
- Техническое влияние
- частичное
Vulnrichment: входные данные дерева решений CISA.
Оценка CNA и NVD
- NVD
- 5,5
- CNA · Linux
- 7,8
- разница 2,3 балла
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Оценка присваивающего органа и независимая оценка NVD. Разрыв означает, что критичность спорна.
Узнайте, когда запись изменится
- Нет в KEV: эксплуатация в реальных атаках не зафиксирована
- Публичного эксплойта нет
- Исправление выпущено
Если что-то из этого изменится, сообщим в ежедневной сводке.
У вас WordPress? Проверьте сайт бесплатно в WP Lens
Анализ Noroxi
Что это значит для вашей инфраструктуры?
Оценка выше формируется автоматически по данным записи и не знает вашей среды. Наша команда проверит на ваших системах, действительно ли уязвимость эксплуатируема и какой меры достаточно.
Мы используем этот продукт, нужна помощьЗатронутые системы
Затронута ли ваша версия?
Выберите продукт и введите свою версию. Она сравнивается с диапазонами этой записи прямо в браузере и никуда не отправляется.
| Вендор | Продукт | CPE |
|---|---|---|
| linux | linux kernel | cpe:2.3:o:linux:linux_kernel |
Затронутые версии
Диапазоны версий NVD (для продуктов из каталога). Добавьте продукт в стек с версией, и сопоставление будет по ним.
- linux linux kernel4.15 и новее · до 6.1.80
- linux linux kernel6.2 и новее · до 6.6.19
- linux linux kernel6.7 и новее · до 6.7.7
- linux linux kernel6.8
Версии, заявленные вендором
Диапазоны затронутых версий, заявленные назначающей организацией (Linux). Не зависят от анализа CPE в NVD и обычно опережают его.
Linux Linux
- 4.15затронута
- 0bcac06f27d7528591c27ac2b093ccd71c5d0168 и новее · до 2dedda77d4493f3e92e414b272bfa60f1f51ed95затронута · git
- 0bcac06f27d7528591c27ac2b093ccd71c5d0168 и новее · до 305152314df82b22cf9b181f3dc5fc411002079aзатронута · git
- 0bcac06f27d7528591c27ac2b093ccd71c5d0168 и новее · до d183a4631acfc7af955c02a02e739cec15f5234dзатронута · git
- 0bcac06f27d7528591c27ac2b093ccd71c5d0168 и новее · до 13ddaf26be324a7f951891ecd9ccd04466d27458затронута · git
- до 4.15не затронута · semver
- 6.1.80 и новее · до 6.1.* включительноне затронута · semver
- 6.6.19 и новее · до 6.6.* включительноне затронута · semver
- 6.7.7 и новее · до 6.7.* включительноне затронута · semver
- 6.8 и новеене затронута · original_commit_for_fix
Затронутые пакеты
Данные OSV и GitHub Advisory: экосистема, пакет и диапазон. Сопоставление SBOM использует эту таблицу.
| Экосистема | Пакет | Затронутый диапазон | Исправление |
|---|---|---|---|
| Debian:12 | linux | до 6.1.82-1 | 6.1.82-1 |
| Debian:13 | linux | до 6.7.7-1 | 6.7.7-1 |
| openSUSE:Leap 15.5 | kernel-azure | до 5.14.21-150500.33.69.1 | 5.14.21-150500.33.69.1 |
| openSUSE:Leap 15.5 | kernel-rt_debug | до 5.14.21-150500.13.73.1 | 5.14.21-150500.13.73.1 |
| openSUSE:Leap 15.5 | kernel-source-azure | до 5.14.21-150500.33.69.1 | 5.14.21-150500.33.69.1 |
| openSUSE:Leap 15.5 | kernel-source-rt | до 5.14.21-150500.13.73.1 | 5.14.21-150500.13.73.1 |
| openSUSE:Leap 15.5 | kernel-syms-azure | до 5.14.21-150500.33.69.1 | 5.14.21-150500.33.69.1 |
| openSUSE:Leap 15.5 | kernel-syms-rt | до 5.14.21-150500.13.73.1 | 5.14.21-150500.13.73.1 |
| openSUSE:Leap 15.6 | dtb-aarch64 | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
| openSUSE:Leap 15.6 | kernel-64kb | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
| openSUSE:Leap 15.6 | kernel-azure | до 6.4.0-150600.8.14.1 | 6.4.0-150600.8.14.1 |
| openSUSE:Leap 15.6 | kernel-debug | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
| openSUSE:Leap 15.6 | kernel-default | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
| openSUSE:Leap 15.6 | kernel-default-base | до 6.4.0-150600.23.25.1.150600.12.10.2 | 6.4.0-150600.23.25.1.150600.12.10.2 |
| openSUSE:Leap 15.6 | kernel-docs | до 6.4.0-150600.23.25.2 | 6.4.0-150600.23.25.2 |
| openSUSE:Leap 15.6 | kernel-kvmsmall | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
| openSUSE:Leap 15.6 | kernel-obs-build | до 6.4.0-150600.23.25.2 | 6.4.0-150600.23.25.2 |
| openSUSE:Leap 15.6 | kernel-obs-qa | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
| openSUSE:Leap 15.6 | kernel-rt | до 6.4.0-150600.10.14.1 | 6.4.0-150600.10.14.1 |
| openSUSE:Leap 15.6 | kernel-rt_debug | до 6.4.0-150600.10.14.1 | 6.4.0-150600.10.14.1 |
| openSUSE:Leap 15.6 | kernel-source | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
| openSUSE:Leap 15.6 | kernel-source-azure | до 6.4.0-150600.8.14.1 | 6.4.0-150600.8.14.1 |
| openSUSE:Leap 15.6 | kernel-source-rt | до 6.4.0-150600.10.14.1 | 6.4.0-150600.10.14.1 |
| openSUSE:Leap 15.6 | kernel-syms | до 6.4.0-150600.23.25.1 | 6.4.0-150600.23.25.1 |
+96
Тот же продукт
linux: все записиДругие записи с наивысшей оценкой для того же основного продукта.
- CVE-2026-31431crypto: algif_aead - Revert to operating out-of-placeKEV90Срочно
- CVE-2022-0847A flaw was found in the way the "flags" member of the new pipe buffer structure was lacking proper initialization in copy_page_to_iter_pipe KEV89Срочно
- CVE-2021-22555Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACEKEV85Срочно
Опубликованы до и после этой записи в том же продукте
- ← РаньшеCVE-2024-267573 апр. 2024 г. · md: Don't ignore read-only array in md_check_recovery()22Наблюдать
- ← РаньшеCVE-2024-267583 апр. 2024 г. · md: Don't ignore suspended array in md_check_recovery()22Наблюдать
- Позже →CVE-2024-267603 апр. 2024 г. · scsi: target: pscsi: Fix bio_put() for error case22Наблюдать
Исправление
На какую версию обновиться
Версии с исправлением по данным вендора, реестров пакетов и Microsoft. Перед обновлением сверьтесь с бюллетенем вендора.
| Продукт / пакет | Исправленная версия | Источник |
|---|---|---|
| Linux Linux | 13ddaf26be324a7f951891ecd9ccd04466d27458 | Вендор (CNA) |
| Linux Linux | 2dedda77d4493f3e92e414b272bfa60f1f51ed95 | Вендор (CNA) |
| Linux Linux | 305152314df82b22cf9b181f3dc5fc411002079a | Вендор (CNA) |
| Linux Linux | d183a4631acfc7af955c02a02e739cec15f5234d | Вендор (CNA) |
| almalinux:bpftool | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-abi-stablelists | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-core | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-cross-headers | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-debug | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-debug-core | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-debug-devel | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-debug-modules | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-debug-modules-extra | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-devel | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| almalinux:kernel-doc | 4.18.0-553.8.1.el8_10 · AlmaLinux:8 | Реестр пакетов (OSV) |
| debian:linux | 6.1.82-1 · Debian:12 | Реестр пакетов (OSV) |
| opensuse:dtb-aarch64 | 6.4.0-150600.23.25.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-64kb | 6.4.0-150600.23.25.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-azure | 6.4.0-150600.8.14.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-debug | 6.4.0-150600.23.25.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-default | 6.4.0-150600.23.25.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-default-base | 6.4.0-150600.23.25.1.150600.12.10.2 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-docs | 6.4.0-150600.23.25.2 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-kvmsmall | 6.4.0-150600.23.25.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-obs-build | 6.4.0-150600.23.25.2 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-obs-qa | 6.4.0-150600.23.25.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-source-azure | 6.4.0-150600.8.14.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| opensuse:kernel-syms-azure | 6.4.0-150600.8.14.1 · openSUSE:Leap 15.6 | Реестр пакетов (OSV) |
| red hat:bpftool-debuginfo | 0:7.3.0-427.57.1.el9_4 · Red Hat:rhel_eus:9.4::appstream | Реестр пакетов (OSV) |
+24
Статус эксплойта
Публичный эксплойт неизвестен
Публичный эксплойт пока не обнаружен. Это не значит, что вы в безопасности, лишь что порог чуть выше.
Контекст для исследователя
Для пентестеров и исследователей: профиль атаки, расхождение оценок, хронология, коммиты исправлений, авторы, кандидаты в варианты и цепочки, охват bug bounty. Всё выводится из имеющихся данных; без кода эксплойтов.
Хронология
От публикации до сегодня: proof of concept, модуль Metasploit, CISA KEV и запись об исправлении. Даты — как сообщают источники.
Кроме публикации датированных событий нет.
Истории пока нет (накапливается ежедневным заданием EPSS).
Ссылки на патчи и коммиты
Коммиты, PR и diff среди источников. Отправная точка для patch-diff и поиска вариантов; это исправления, не эксплойты.
Среди источников нет ссылок на коммит или PR.
Авторы
Все исследователиНашедшие, сообщившие и аналитики, названные в записи CNA. Нажмите имя, чтобы увидеть другие записи исследователя.
В записи CNA нет авторов.
Кандидаты в варианты
Тот же продукт, тот же класс уязвимости, в пределах 18 месяцев. Если патч не закрыл первопричину, родственная ошибка здесь.
Ночной расчёт связей ничего не нашёл.
Кандидаты в цепочки
Обход аутентификации и уязвимость, требующая привилегий, в одном продукте и близко по времени: вместе они могут дать путь без аутентификации.
—
Охват bug bounty
Известной публичной программы нет.
Источник: bounty-targets-data (публичные списки HackerOne, Bugcrowd, Intigriti, YesWeHack).
Национальное уведомление (Управление кибербезопасности Турции / USOM)
Официальные уведомления, ссылающиеся на эту запись; рекомендации — на странице ведомства.
- TR-24-0265 · 4 апр. 2024 г.(Linux Kernel Güncellemesi)
Технические детали
Условия атаки
- Может быть вызвана пользователем с локальным доступом к системе.
- Достаточно учётной записи с низкими привилегиями.
- Действия пользователя не требуются.
- Особые условия не требуются; воспроизводится стабильно.
В случае успеха
- Конфиденциальность
- нет
- Целостность
- нет
- Доступность
- высокое · работа сервиса может быть нарушена
- Вектор атаки
- Локальный
- Сложность атаки
- Низкая
- Требуемые привилегии
- Низкие
- Взаимодействие с пользователем
- Не требуется
- Область действия
- Не изменяется
- Влияние на конфиденциальность
- Нет
- Влияние на целостность
- Нет
- Влияние на доступность
- Высокое
Класс уязвимости (CWE)
CWE-787 · Out-of-bounds WriteВектор CVSS
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
nvd-primary
Контекст атаки
Шаблоны атак MITRE CAPEC и техники ATT&CK для этого класса уязвимости (CWE). Отправная точка для правил обнаружения и threat hunting.
У MITRE нет сопоставления CAPEC/ATT&CK для этого CWE.
Журнал изменений
- Исправление✗ → ✓
Для отслеживаемых записей эти изменения приходят и как уведомления. →
Источники
Показать все источники (ещё 3)Свернуть
Рекомендации вендоров и официальные записи. Ссылки на эксплойты/PoC намеренно исключены.