К обсуждениям

Linux BPF: user pointer array проверяется через access_ok

Редакция VOne Технологии

Практическая проверка BPF copy_user_syms user-pointer boundary по свежему kernel advisory: runtime build, upstream commit, безопасный fixture и чёткий stop-rule без production-нагрузки.

Узкая граница BPF copy_user_syms user-pointer boundary

Для BPF copy_user_syms user-pointer boundary проверяется не общий статус Linux, а один конкретный переход: copy_user_syms применял __get_user к userspace pointer array без предварительного access_ok для всего диапазона. Исправление добавляет missing gate и упрощает error path для allocation failure. Версионная граница статьи — присутствие stable commit из GHSA-jrm7-h4fx-vpxv либо документированного backport поставщика в загруженном kernel build. Собственный предмет этой страницы выражен как «таблицу pointer provenance × array length overflow check × access_ok result × allocation/read calls × errno». Он не совпадает с соседними parser, filesystem, socket или workqueue задачами. Карточка от 4 сентября служит свежим сигналом; она не доказывает, что конкретный узел затронут или подвергался атаке.

Runtime-карта для BPF copy_user_syms user-pointer boundary

Сначала соберите uname/build ID, distribution package revision, loaded module/feature state и mapping vendor advisory → stable commit без hostnames и пользовательских данных. Затем заполните «таблицу pointer provenance × array length overflow check × access_ok result × allocation/read calls × errno» для фактически загруженного ядра. У BPF copy_user_syms user-pointer boundary каждое поле отвечает на отдельный вопрос о достижимости и последовательности внутренних состояний; UNKNOWN нельзя заменять предположением по номеру дистрибутива. Сопоставьте vendor changelog с commit 0b6252afcd1965f77c6a6f8a802a2e1381822b98 и сохраните package provenance. Имена машин, адреса, пользовательский трафик и дампы памяти в runtime-карту не входят.

Контроль без production-нагрузки

Для этой ветки допустим следующий bounded test: Запустите официальный BPF selftest или unit mock с valid userspace buffer и заранее rejected symbolic invalid range; произвольные kernel addresses не используются. До опыта для BPF copy_user_syms user-pointer boundary фиксируют нулевые side-effect counters и hash fixture, после — удаляют fixture и повторно проверяют baseline. Искомый результат сформулирован предметно: Invalid range отклонён до __get_user/read counter, valid fixture сохраняет результат, allocation failure возвращает ENOMEM без второго path. Один boot, один test case или отсутствие crash не заменяют наблюдение названных состояний. Если официального selftest нет, выполняют только source/backport audit и оставляют runtime verdict UNKNOWN.

Решение по stable fix

План исправления для BPF copy_user_syms user-pointer boundary: Установить поддерживаемое ядро с указанным stable fix либо подтверждённым backport поставщика; до этого исключить достижимый component path по change control. PASS ставится только при подтверждённом build provenance и выполнении условия «Invalid range отклонён до __get_user/read counter, valid fixture сохраняет результат, allocation failure возвращает ENOMEM без второго path.». UPDATE-REQUIRED означает, что commit/backport отсутствует при достижимой функции. NOT-REACHABLE описывает только проверенный module path, но не весь kernel. После обновления повторяют именно «таблицу pointer provenance × array length overflow check × access_ok result × allocation/read calls × errno» и обычный smoke компонента. При расхождении исходников, package metadata и running build результат остаётся UNKNOWN без попытки силового воспроизведения.

Stop-rule для BPF copy_user_syms user-pointer boundary

Остановка обязательна: Не подставлять kernel pointer, не загружать неизвестную BPF program, не отключать lockdown и не выполнять тест на рабочем узле. Для BPF copy_user_syms user-pointer boundary нельзя расширять права, длительность, packet volume, mount scope или concurrency только ради наблюдаемого сбоя. Advisory GHSA-jrm7-h4fx-vpxv описывает исправленную техническую возможность, но не историю данного сервера. Не публикуйте trigger bytes, рабочие идентификаторы, network captures или exploit recipe. Если безопасный upstream selftest недоступен, достаточный следующий шаг — обновление по vendor bulletin и проверка health, а не самостоятельный атакующий образец.

Доказательство и очистка

Минимальный evidence package для владельца BPF copy_user_syms user-pointer boundary: kernel/build, selftest name, pointer class, access_ok boolean, read counters, errno и stable commit. Добавьте Moscow timestamp, expected/actual, ссылку на GHSA-jrm7-h4fx-vpxv и stable commit, а также результат cleanup. Уникальность отчёта задаёт сочетание «таблицу pointer provenance × array length overflow check × access_ok result × allocation/read calls × errno» с конкретным контролем «Запустите официальный BPF selftest или unit mock с valid userspace buffer и заранее rejected symbolic invalid range; произвольные kernel addresses не используются.». Полные журналы, IP, usernames, credentials и пользовательские payload исключаются. Такой пакет позволяет независимо проверить backport и решение, но не обещает совместимость иной ветки, отсутствие прошлой эксплуатации, массовость наблюдения, индексацию или позиции.

Материал подготовлен редакцией VOne с помощью автоматизированного черновика. Факты и границы вывода сверены 4 сентября 2026 года по прямой advisory и первичному источнику. Текст написан самостоятельно; опасные действия и реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.