Похек
All materials published on the channel are for educational and informational purposes only. Мнение автора ≠ мнение компании, где работает автор Чат: @poxek_chat Реклама: @szybnev или https://telega.in/c/poxek РКН: https://clck.ru/3FsVhp
Show more📈 Analytical overview of Telegram channel Похек
Channel Похек (@poxek) in the Russian language segment is an active participant. Currently, the community unites 17 244 subscribers, ranking 7 591 in the Technologies & Applications category and 38 814 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 17 244 subscribers.
According to the latest data from 07 July, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 299 over the last 30 days and by 8 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 14.17%. Within the first 24 hours after publication, content typically collects 8.83% reactions from the total number of subscribers.
- Post reach: On average, each post receives 2 443 views. Within the first day, a publication typically gains 1 522 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 7.
- Thematic interests: Content is focused on key topics such as cvss, llm, cve, api, cve-2025.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“All materials published on the channel are for educational and informational purposes only.
Мнение автора ≠ мнение компании, где работает автор
Чат: @poxek_chat
Реклама: @szybnev или
https://telega.in/c/poxek
РКН: https://clck.ru/3FsVhp”
Thanks to the high frequency of updates (latest data received on 08 July, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
app.ini был дефолт REVERSE_PROXY_TRUSTED_PROXIES = *, хотя безопасное значение должно доверять только loopback. Если админ включил ENABLE_REVERSE_PROXY_AUTHENTICATION для работы за аутентифицирующим reverse proxy и при этом HTTP-порт контейнера доступен напрямую, любой клиент может прислать X-WEBAUTH-USER: poxek и попасть в Gitea как poxek без пароля и токена.
♾️Импакт♾️
Известный или угадываемый логин превращается в сессию этого пользователя. Для admin, gitea_admin и похожих имен это уже полный takeover Gitea на уровне приложения: приватные репозитории, пользователи, организации, packages, релизы, вебхуки и потенциально downstream CI/CD. RCE не является гарантированным блекбокс импактом самой CVE; его можно заявлять только если конкретная инсталляция позволяет дойти до выполнения кода через runner, хуки, CI-секреты или deployment-пайплайн.
♾️PoC♾️
Я не нашёл публичных PoC, поэтому написал свой и выложил публичный PoC/чекер: szybnev/cve-2026-20896-gitea-poc
В репе есть Go-версия для массовой проверки с --targets, --user-file, --concurrency, --jsonl и --dry-run, плюс простой Bash скриптик без зависимостей. Чекер сначала парсит страницу и не фаззит usernames, если видит Gitea >=1.26.3, например Powered by Gitea Version: 1.26.4. Для уязвимой локальной 1.26.2 проверка подтверждает impersonation по title dashboard без cookie и пароля.
♾️Митигация♾️
▪️обновиться минимум до 1.26.3, лучше до 1.26.4+;
▪️не публиковать giea напрямую
▪️явно настроить trusted proxies
▪️не включать reverse-proxy auth без понятной сетевой границы
🔗Источники:
GHSA-f75j-4cw6-rmx4 / Gitea 1.26.3/1.26.4 release notes
fix PR #38151 / CVE record
Sysdig telemetry via The Hacker News
🌚 @poxek | 🌚 @poxek_ai | 📲 MAXv2.1.2 непривилегированный пользователь внутри QEMU-гостя мог подключиться к /run/lima-guestagent.sock и через lima-guestagent, запущенный от root, выполнить команды с uid=0 внутри этой же VM. В advisory уязвимость оценена как High, CVSS 8.2; исправление вышло в Lima v2.1.3.
Механика сводится к открытой локальной границе доверия. Агент гостевой системы в QEMU-режиме работал от root, поднимал gRPC API без аутентификации на Unix-сокете и выставлял этому сокету права 0o777. За сокетом был RPC-вызов Tunnel: агент мог открыть соединение к адресу, который задает клиент, включая локальные Unix-сокеты привилегированных демонов. В итоге обычный пользователь гостя мог заставить root-процесс выступить посредником, а конечный сервис видел учетные данные агента, а не исходного пользователя.
Публично описанная цепочка выглядит так:
непривилегированный пользователь -> /run/lima-guestagent.sock (mode 0o777, владелец root) -> gRPC API агента гостевой системы без аутентификации -> Tunnel RPC, который подключается к произвольному адресу от имени root -> root-only IPC, например D-Bus -> выполнение команд как root внутри гостяКорневая причина сводится к одной строке в
cmd/lima-guestagent/daemon_linux.go в Lima v2.1.2:
os.Chmod(socket, 0o777)Границы воздействия здесь стоит держать точными: это не побег из гостевой VM на хост и не удаленная эксплуатация. Атакующему уже нужен локальный доступ внутрь Lima QEMU VM. VZ-драйвер на macOS не затронут: там агент использует vsock, а не этот Unix-сокет. Но для сред разработки, где в одной VM живут разные процессы, CI-задачи или тестовые нагрузки, баг ломает внутреннюю модель изоляции: обычный аккаунт становится root внутри гостя. Исправление получилось минимальным. Commit
8a45892 меняет модель доступа к сокету: вместо chmod 0o777 Lima добавила параметр --socket-owner, передает UID основного пользователя, меняет владельца сокета через chown и ставит chmod 0o600. Граница доступа закрывается на уровне IPC, без переписывания каждого RPC-вызова.
Публичного PoC на CVE-2026-53657 сейчас нет. Авторы write-up на Syntetisk прямо пишут, что намеренно не публикуют пошаговые детали эксплуатации: точку назначения для перенаправления, механику проксирования и исполняемые файлы PoC они оставляют приватными. Если командам нужно проверить уязвимость до или после обновления, исследователи предлагают связаться с ними напрямую.
Быстрая самостоятельная проверка внутри гостя — владелец и права /run/lima-guestagent.sock: 0o777 root указывает на уязвимое состояние, 0o600 на основном пользователе соответствует исправлению. Теоретически PoC можно собрать из исходников Lima v2.1.2 + оригинальный райтап + ИИ агент (я советую попробовать Mimo v2.5 Pro или GLM 5.2, они меньше сопротивляются для написания сплойтов и автосканеров. Но сойдет gpt-5.5 или sonnet 4.6 [НЕ 5 ВЕРСИЯ]/opus 4.8 ).
🌚 @poxek | 🌚 @poxek_ai | 📲 MAXrootdr-backup/TokenTwin-Checker по коду, не только по README. Это Jython-расширение для Burp Suite: берёт выбранные запросы из контекстного меню, подставляет заголовки разных пользователей и сравнивает ответы по статусу и хэшу тела. Идея простая: быстро прогнать один и тот же endpoint от имени User A/User B/нескольких аккаунтов и подсветить возможный BAC/IDOR, если ответы совпали там, где должны различаться.
Качество кода нормальное для однофайлового Burp расширения: поток анализа вынесен отдельно, UI не совсем блокируется, есть Stop, фильтр статических ресурсов, baseline/all-vs-all режимы, POC-viewer и merge cookie через OrderedDict. Но это всё ещё один файл на 1600+ строк с Swing/Jython-кодом, где UI, модель данных, сетевой прогон и экспорт смешаны. Лучше было бы разнести на несколько файлов
Что бы я допилил первым: явную UTF-8 запись/чтение JSON и CSV вместо системной кодировки Java, лимит/очистку _msg_store, потому что сейчас полные req/resp могут раздувать размер проекта Burp на длинных сессиях + помним что Бурп всё ещё хреново работает с ОЗУ, валидацию импортируемого JSON и header names/values, чтобы не тащить мусор в buildHttpMessage(), и предкомпиляцию ignore-regex с видимой ошибкой пользователю вместо молчаливого except.
Я пока его не потестил, но идея и реализация выглядит вполне рабоче и здраво
Из ближайших аналогов могу предложить попробовать https://github.com/errorfiathck/IDOR-Forge или SKILL для ИИ агентов https://github.com/davila7/claude-code-templates/blob/main/cli-tool/components/skills/security/idor-testing/SKILL.mdpickle-объект под ключ сессии, затем отправляет запрос с нужным sessionid, и приложение само достает значение из кэша. Механика реальная: в RedisCache после неудачного int() вызывается pickle.loads(), а PyMemcacheCache по умолчанию использует pymemcache.serde.pickle_serde.
Ограничение в другом: это не “любой Django 6.0.4 выполняет код по HTTP”. В официальных release notes 6.0.4 нет RCE по cache backend: там один moderate и четыре low security issue. Для эксплуатации нужен контроль над данными в cache backend: открытый Redis/Memcached, SSRF до внутреннего Redis, боковое перемещение или общий кэш между разными trust zone. Без возможности записать произвольное значение в кэш цепочка не складывается.
Риск все равно практичный. Во многих продакшенах Redis считается внутренним сервисом и остается без ACL, TLS и жесткой сетевой изоляции. Тогда кэш перестает быть просто ускорителем: запись в него может стать выполнением кода в процессе Django-приложения.
Проверять надо не только версию Django. Смотрите SESSION_ENGINE, CACHES, доступ к Redis/Memcached, разделение кэшей между сервисами и возможность заменить pickle на безопасный serializer для конкретных данных. Обновления нужны, но этот класс риска закрывается архитектурой: изоляцией cache backend, аутентификацией, ACL и запретом общих кэшей между разными уровнями доверия.
🌚 @poxek | 🌚 @poxek_ai | 📲 MAX{{7*7}} давала по итогу 7*7. Подумав, что это может быть какой-то кривой патч, я вставил нагрузку {{{{7*7}}}} и получил в итоге 49 (никогда не думал, что встречу такой тупизм :D) ! Казалось бы, что это победа, однако если нагрузка сложнее математической операции, например, {{{{['id']|filter('system')}}}}, то ничего не отрабатывало. Поэтому я решил залезть в код и поискать эту чудо-функцию =)
Ниже представлен ооочень отдалённый пример кода, чтобы был понятен контекст:
<?php
require_once 'vendor/autoload.php';
error_reporting(E_ERROR | E_PARSE);
class User {
public $username;
public $secondname;
public function __construct($username, $secondname) {
$this->username = $username;
$this->secondname = $secondname;
}
}
$allowed = ['user.username'];
function prepareVars(string $template, array $allowedKeys): string {
return preg_replace_callback(
'/\{\{(.*?)\}\}/i', //Регулярка для извлечения значения между {{...}}
function ($matches) use ($allowedKeys) {
$value = trim($matches[1] ?? ''); //Берётся наше значение
if (in_array($value, $allowedKeys)) { //Оно скорее всего не подпадает под $allowedKeys
return "{{ {$value} | raw }}";
}
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); //В итоге оно попадает сюда с ENT_QUOTES
},
$template
);
}
$username = $_GET['username'] ?? 'John';
$secondname = $_GET['secondname'] ?? 'Doe';
$user = new User($username, $secondname);
$templateInput = $_GET['template'] ?? 'Guest';
$fullTemplate = 'Hello ' . $templateInput;
$processedTemplate = prepareVars($fullTemplate, $allowed);
$loader = new \Twig\Loader\ArrayLoader([
'index' => $processedTemplate,
]);
$twig = new \Twig\Environment($loader);
echo $twig->render('index', ['user' => $user]);
Отсюда мы видим причину, почему приходилось использовать 2 пары фигурных скобок, а также новую проблему - htmlspecialchars с ENT_QUOTES. Некоторое время я думал, что с этим делать, так как большинство нагрузок для RCE требуют какие-либо кавычки, а потом до меня дошло:
Мне для той же нагрузки {{['id']|filter('system')}} нужно передать именно соответствующие строки, необязательно их передавать в формате с кавычками, можно передать какую-либо доступную переменную, содержащую нужное значение. Например, мы тут видим, что можем использовать поля объекта класса User: через username передать id, а через secondname передать system. По итогу будет что-то типа такого - /?template={{{{[user.username]|filter(user.secondname)}}}}&username=ls&secondname=system.
В моём случае приложение было на PHP Symfony, а данные о пользователе передавались не от меня. Ознакомившись с документацией, можно узнать, что нам достаточно проставить необходимые значения в поля пользователя(просто зайти в раздел профиля УЗ и установить нужные значения), а дальше использовать их через {{app.user.*}} уже в Twig в уязвимом разделе.
Если же у вас только одно контролируемое значение(например subject), а нужно передать 2 строки в SSTI, то просто в subject пихаем 2 строки вместе: idsystem. А дальше извлекаем их посимвольно:
{{{{[subject|slice(0,2)]|filter(subject|slice(-6))}}}}NtAllocateVirtualMemory, NtProtectVirtualMemory, NtQueueApcThread и похожие операции. Если в стеке виден shellcode, unsigned module или executable heap, обход ntdll-хуков уже не закрывает детект.
LACUNA Chain переносит атаку на уровень unwind-механики Windows x64: не скрывает сам факт операции, а подменяет историю вызова, которую увидит stack collector.
♾️Как работает♾️
На x64 Windows стек обычно восстанавливается через .pdata. Для функций там лежат RUNTIME_FUNCTION и unwind metadata. Но если RtlLookupFunctionEntry(ControlPc) не находит запись, RtlVirtualUnwind трактует адрес как leaf-функцию: читает следующий RIP из [RSP] и двигает RSP на 8 байт.
Автор использует это как BYOUD-Gap: берёт адреса внутри легитимных DLL, но между покрытыми .pdata функциями. Для unwind-кода это валидный leaf-frame. Для простого EDR-правила это кадр из ntdll, kernelbase, wow64 или win32u, а не из payload.
В статье собирается цепочка:
KiUserExceptionDispatcher -> ghost frame рядом с WoW64 exception path -> ghost рядом с VirtualProtect -> ghost рядом с thread-creation API -> NOP-gap в win32u -> RtlUserThreadStart.
Отдельный слой — ETW-Ti APC window. Событие появляется в ядре, но stackwalk может исполняться через USER_APC, который доставляется только при alertable wait. Значит, чувствительная операция уже прошла, стек можно подготовить, затем войти в alertable NtDelayExecution, и сборщик увидит ghost-chain.
♾️Анализ исходников♾️
В репозитории это реализовано не как статичный набор оффсетов. В lacuna_chain.c сканер PE читает .pdata, ищет промежутки между EndAddress текущего RUNTIME_FUNCTION и BeginAddress следующего, отбрасывает padding из 00/CC/90 и выбирает ghost regions рядом с экспортами VirtualProtect, RtlCreateUserThread, Wow64PrepareForException. Для win32u отдельно ищется 8-байтовый NOP gap.
build_chain() выбирает L1-L5, ищет ghost gadget JMP [RBX] внутри ghost-region и строит LacunaStack. Для BYOUD-MF код ищет unwind opcode UWOP_PUSH_MACHFRAME в ntdll, кладёт fake machine frame и задаёт Rsp так, чтобы unwind перескочил на буфер L2 -> L3 -> L4 -> L5. Режим verify прогоняет цепочку через RtlLookupFunctionEntry и RtlVirtualUnwind, то есть проверяет тот же класс механики, на который опирается сборщик стеков.
В inject добавлен прикладной обход корреляций: вместо VirtualAllocEx -> WriteProcessMemory -> VirtualProtect используется section-based injection. Код создаёт section, мапит локальный RW view, пишет payload, затем мапит remote RX view через NtMapViewOfSection и ставит APC. NtWriteVirtualMemory в целевой процесс не вызывается.
Самый плотный участок — param_encrypt_veh. Перед syscall ставится hardware breakpoint на syscall;ret. На EXCEPTION_SINGLE_STEP VEH расшифровывает RCX/RDX/R8/R9/R10, подменяет return address на ret gadget внутри ntdll, а в режиме full_spoof заменяет stack slots, указывающие внутрь lacuna.exe, на ghost-frame адреса. После возврата через DR1 старые значения восстанавливаются. Подмена живёт только в окне наблюдения.
Отдельный lacuna_sleep.c применяет тот же подход к sleep-obfuscation: ghost-call stub меняет [RSP] на ghost address, tail-jump’ит в API, VEH на hardware breakpoint возвращает управление на сохранённый настоящий return. Цикл делает NtProtectVirtualMemory(RW), XOR payload, NtDelayExecution(alertable=TRUE) с ghost-chain на стеке, расшифровку и возврат в RX.
♾️Ограничения♾️
PoC зависит от конкретных DLL, их .pdata, наличия ghost regions, win32u gaps и подходящих unwind-паттернов. В коде это частично закрыто runtime-сканированием и fallback-логикой, но не превращает технику в универсальный bypass для любой версии Windows и любого EDR.
Заявления о полном обходе Elastic, Bitdefender и Kaspersky идут из лабораторных тестов автора. Я проверял код и соответствие кода статье, но не воспроизводил эти EDR тесты локально.
🔗Источники:
Статья 0xmaz, 20 июня 2026
🐱 MazX0p/LACUNA-Chain
🌚 @poxek | 🌚 @poxek_ai | 📲 MAXОбменяемся опытом в кругу своих, обсудим факапы и разберем: ✅ Как подготовиться к инциденту так, чтобы во время атаки не пришлось действовать вслепую ✅ Что на самом деле происходит «в полях» пентеста: где ожидания расходятся с реальностью, почему это не «скрытный обход SOC» и к чему приводит внедрение ИИКому будет интересно? SOC-специалистам, пентестерам и ИБ-практикам 🗓 25 июня, 19:00 📍 Москва, офлайн Участие бесплатное. Количество мест ограничено. Зарегистрироваться
Обменяемся опытом в кругу своих, обсудим факапы и разберем: ✅ Как подготовиться к инциденту так, чтобы во время атаки не пришлось действовать вслепую ✅ Что на самом деле происходит «в полях» пентеста: где ожидания расходятся с реальностью, почему это не «скрытный обход SOC» и к чему приводит внедрение ИИКому будет интересно? SOC-специалистам, пентестерам и ИБ-практикам 🗓 25 июня, 19:00 📍 Москва, офлайн Участие бесплатное. Количество мест ограничено. Зарегистрироваться
