uk
Feedback
Positive Development Community

Positive Development Community

Відкрити в Telegram
3 177
Підписники
-124 години
-17 днів
-930 день
Архів дописів
🔍 Наиболее интересные уязвимости 🐛 CVE-2026-61539, обнаруженная в Xinference в версиях до 2.7.0, приводит к Remote Code Exe
+4
🔍 Наиболее интересные уязвимости 🐛 CVE-2026-61539, обнаруженная в Xinference в версиях до 2.7.0, приводит к Remote Code Execution (RCE) [fix]. 🐛 CVE-2026-77815, обнаруженная в Infinite Image Browsing в версиях до 1.8.0 включительно, приводит к Path Traversal [fix]. 🐛 CVE-2026-71513, обнаруженная в NLTK в версиях до 3.10.3, приводит к Insecure Deserialization [fix]. 🐛 CVE-2026-62316, обнаруженная в Microsoft UFO в версиях до 3.0.8, приводит к Server-Side Request Forgery (SSRF) [fix]. 🐛 CVE-2026-49436, обнаруженная в LinkAce в версиях до 2.5.7, приводит к Cross-Site Scripting (XSS) [fix].

+9
Всем отставить созвоны, и бегом в правильную часть пятницы (седьмой час уже, имейте совесть)! Всем, кто уже в пути: благополучно добраться, достойно встретить и приятно провести чудесные выходные 🤗

Оставляем новый формат постов о CVE (с картинками)?
Anonymous voting

🔍 Наиболее интересные уязвимости 🐛 CVE-2026-71964, обнаруженная в CyberPanel в версиях до 2.4.3 включительно, приводит к Ar
+4
🔍 Наиболее интересные уязвимости 🐛 CVE-2026-71964, обнаруженная в CyberPanel в версиях до 2.4.3 включительно, приводит к Arbitrary File Reading [fix]. 🐛 CVE-2026-72908, обнаруженная в ERPNext в версиях до 15.109.0 и 16.20.0, приводит к SQL Injection [fix]. 🐛 CVE-2026-73222, обнаруженная в Claude Code Templates в версиях до 1.29.4, приводит к Remote Code Execution (RCE) [fix]. 🐛 CVE-2026-73228, обнаруженная в Django REST framework в версиях до 3.17.2, приводит к Uncontrolled Resource Consumption (DoS) [fix]. 🐛 CVE-2026-73498, обнаруженная в MCP Atlassian в версиях до 0.22.0, приводит к Path Traversal [fix].

Что может быть грустнее, чем последняя пятница в отпуске? 🥺 Правильно, много чего. Потому что пятница — есть пятница, как ни
+9
Что может быть грустнее, чем последняя пятница в отпуске? 🥺 Правильно, много чего. Потому что пятница — есть пятница, как ни крути. Так что, всем взбодриться (мемы в помощь) и уверенным шагом отправляться в её правильную часть! А, и чудесных всем выходных ещё 🙈

🔍 Наиболее интересные уязвимости 🐛 CVE-2026-53992, обнаруженная в ProjectSend в версиях r1945 - r2098, приводит к Cross-site Scripting (XSS). Проблема заключалась в прямом использовании параметров запроса ($_GET['start_date'] и $_GET['end_date']) в HTML-атрибутах полей фильтра без экранирования. В исправлении разработчики стали оборачивать оба параметра в htmlspecialchars($_GET[...], ENT_QUOTES, 'UTF-8') непосредственно при их чтении. 🐛 CVE-2026-70609, обнаруженная в Electron версиях до 39.8.7, 40.9.0, 41.2.0 и 42.0.0-beta.1, приводит к Remote Code Execution (RCE). Проблема заключалась в том, что dock_state_, полученный из аргумента mode функции webContents.openDevTools() или сохранённых настроек DevTools, подставлялся напрямую в строку JavaScript-кода для выполнения скрипта в контексте DevTools. В исправлении разработчики добавили функцию IsValidDockState(), сверяющую значение с фиксированным набором {"bottom","left","right","undocked"}. 🐛 CVE-2026-71313, обнаруженная в rclone версий с 1.51.0 по 1.75.0, приводит к Path Traversal. Проблема заключалась в том, что localPath() строила путь к файлу через filepath.Join(f.root, ...). В исправлении разработчики добавили в localPath() проверку filepath.Rel(f.root, localPath) и возврат ошибки errPathEscapes, если результат выходит за пределы root. 🐛 CVE-2026-71319, обнаруженная в Nuxt DevTools до версии 3.3.1, приводит к Remote Code Execution (RCE). Проблема заключалась в том, что RPC-методы updateOptions(), clearOptions() и openInEditor() не требовали токена, а openInEditor() запускал launch-editor как дочерний процесс с путём, настраиваемым через тот же updateOptions(). В исправлении разработчики добавили обязательный параметр token в эти методы, проверяемый через ensureDevAuthToken() перед выполнением. 🐛 CVE-2026-71434, обнаруженная в Statamic CMS до версий 5.74.3 и 6.24.2, приводит к Unrestricted File Upload. Проблема заключалась в том, что FrontendFormRequest::extraRules() применяла правило AllowedFile только к полям assets, не подмешивая правила валидации настроенного AssetContainer, а для полей files ограничение по расширению вообще не задавалось. В исправлении разработчики распространили extraRules() на оба типа полей, подмешав allowed_extensions для files и validationRules() контейнера для assets.

+9
Кто рано встает... тот уже не спящего в такую рань в отпуске админа застает 🙂 Но заметьте — админа, не забывшего, что 3К+ человек всю неделю терпят тут всякие странные посты ради того, чтобы насладиться пятничными мемами 🤗

🔍 Наиболее интересные уязвимости 🐛 CVE-2026-63221, обнаруженная в CodeIgniter4 в версиях с 4.3.0 по 4.7.3, приводит к SQL Injection. Проблема заключалась в том, что внутренний метод _deleteBatch() при формировании запроса на удаление подставлял связанные значения из условий where() напрямую в запрос, что позволяло внедрить и выполнить произвольный SQL код. В исправлении разработчики вынесли обработку значений в новый метод convertWhereBindsForBatch(), который обрабатывает значения через db->escape() перед их подстановкой в SQL. 🐛 CVE-2026-67346, обнаруженная в Swarms до версии 6.8.1, приводит к Server-Side Request Forgery (SSRF). Проблема заключалась в том, что функция _is_safe_url() проверяла только IP-адрес, указанный непосредственно в URL, но не анализировала доменные имена, что позволяло злоумышленнику заставлять сервер обращаться к произвольным хостам. В исправлении разработчики добавили проверку IP-адресов, полученных в результате DNS-разрешения имени хоста, и начали отклонять URL, которые указывают на приватные диапазоны адресов. 🐛 CVE-2026-67438, обнаруженная в OliveTin в версиях с 3000.2.0 по 3000.17.x, приводит к OS Command Injection. Проблема заключалась в том, что функция checkShellArgumentSafety() не считала пользовательские типы аргументов с префиксом regex: небезопасными для Shell-режима, что позволяло злоумышленниу передать значение, удовлетворяющее регулярному выражению, и выполнить произвольные команды операционной системы. В исправлении разработчики начали рассматривать все типы аргументов с префиксом regex: как небезопасные для Shell-режима и запретили их использование при формировании shell-команд. 🐛 CVE-2026-54705, обнаруженная в MathLive до версии 0.110.0, приводит к Cross-Site Scripting (XSS). Проблема заключалась в том, что команды \text{} и \mbox{} сохраняли специальные HTML-символы без экранирования и затем напрямую включали их в сформированную HTML- и MathML-разметку, что позволяло злоумышленнику внедрить вредоносный HTML- или JavaScript-код, который выполнялся при отображении математического выражения. В исправлении разработчики добавили экранирование специальных HTML-символов при формировании HTML- и MathML-представлений текстовых элементов. 🐛 CVE-2026-54662, обнаруженная в swagger-typescript-api до версии 13.12.2, приводит к Remote Code Execution (RCE). Проблема заключалась в том, что значение servers[0].url из OpenAPI-спецификации без экранирования вставлялось в поле baseUrl сгенерированного TypeScript-клиента, что позволяло злоумышленнику сформировать специально подготовленную OpenAPI-спецификацию, внедрить произвольный TypeScript-код и добиться его выполнения при импорте сгенерированного модуля. В исправлении разработчики добавили экранирование строковых литералов JavaScript через функцию escapeJsStringLiteral().

🔎 Ковыряем Codex Security OpenAI выложили @openai/codex-security — CLI и TypeScript-SDK для поиска, валидации и фикса уязвимостей в коде. Самое время заглянуть внутрь. Проект Сам пакет построен поверх @openai/codex и @openai/codex-sdk. В src/ около 13,7 тыс. строк TypeScript, логика скана вынесена в _bundled_plugin/. Это бандл из 13 скиллов (каждый со своим субагентом), MCP-сервера, 32 Python-скриптов, реф-документов (references/) и JSON-схем (schemas/: coverage, findings, scan-manifest). Как оно работает Сначала threat-model строит модель угроз, затем оркестратор security-scan гоняет файлы через finding-discovery, который ищет кандидатов на уязвимости. Каждый кандидат проходит validation и attack-path-analysis (цепочка source → контроль → sink). В финале идут фиксы, и формирование отчёта. Из 13 скиллов основными остаются именно эти 5, плюс триаж, отчетность и харденинг. Классы уязвимостей Таксономия в проекте задана набором примеров в скиллах, прежде всего в severity-policy и finding-discovery, и сами документы отмечают их как «не исчерпывающие». На практике границы охвата задаёт то, что модель сама распознает как уязвимость, детерминированного списка правил нет. В документах упомянуты семейства: - Инъекции: Command Injection, SQL/NoSQL/LDAP/XPath Injection, SSTI, XXE, XSS, Path Traversal, LFI/AFR/AFW, SSRF. - Контроль доступа: обход авторизации и IDOR, нарушения границ доверия, обход аутентификации и захват аккаунта, CSRF на критичных действиях, повышение привилегий. - Данные: утечка секретов, PII, ключей подписи и весов моделей, URL-импортёры и callback-клиенты. - Выполнение кода и память: повреждения памяти, побеги из песочниц, контейнеров, VM и интерпретаторов, небезопасная десериализация (pickle, yaml, кодеки), опасные загрузки файлов, абьюз плагинов и макросов. - Прочее: криптографические ошибки, уязвимости цепочки поставок, хардкод кред, логические уязвимости с нарушением целостности данных, DoS через исчерпание ресурсов. Нейросимвольность За моделью оставлена вся нечёткая часть работы: рассуждение о достижимости пути, контексте, намерениях разработчика. Формальная же логика сосредоточена в py-скриптах: ранжирование файлов, нормализация кандидатов, валидация контракта скана, генерация report.md и SARIF. Скиллы весьма объёмны и пестрят оговорками вида «do not», «never», «must». По ним, при желании, можно восстановить всю историю боли и страданий разработчиков, занимавшихся отладкой этого проекта 🤗 Поддерживается режим --mode deep, который сводится к многократному независимому запуску discovery (--max-discovery-runs 10, --stop-after-no-new 3) с последующим слиянием кандидатов на проверку. Смысл тут в том, что из-за недетерминизма LLM, для поднятия полноты и покрытия, нужно прогнать поиск несколько раз и взять объединение результатов. Настраивать агрессивность можно руками: --workers, --subagents, --effort .... И да, это недёшево — модуль cost.ts как бы намекает. Глубокий прогон среднего репозитория (~60 KLoC, связка c0wrk и sp4rk) обходится в десятки миллионов токенов. Точность анализа при этом весьма высокая, если включать глубокий режим (проверял на ShopVault — у gpt-5.6 knowledge cut-off августа 2025, вроде, т.ч. пока норм). Окружение и защита Безопасность рантайма базово есть. Модуль trusted-executable чистит PATH, чтобы агент ненароком не запустил лишнего, и защищает от подсунутых в репу бинарников, учитывает симлинки и специфику Windows. Для пакетных задач есть докер-сканы, опциональный AppArmor-профиль. Есть коннекторы к GitHub, Linear и Atlassian, API-ключи для CI в систему не пишутся. Pro/Cons ➕ Построение атакуемых трасс, разумное разделение между LLM и формальным слоем, лаконичная, но эффективная защита. ➖Полнота держится на детерминизме модели и количестве перезапусков, что делает каждый скан непрогнозируемой историей. Количественных бенчмарков нет, правила поверхностны, и полагаются на знания LLM. ⚠ TL;DR: в пайплайне лишним не будет. Если токенов не жалко. #ИИ_безопасность #ИИ_инструменты

+9
Что может быть лучше медленно надвигающейся правильной части пятницы? Верно: медленно надвигающаяся правильная часть пятницы в отпуске 🦄 Так что, просьба с пониманием отнестись к возможным перебоям в своевременных поставках мемов следующие две недели. Главное, чтобы это никого до деплоя в пятницу вечером не довело 🙏

🔍 Наиболее интересные уязвимости 🐛 CVE-2026-54910, обнаруженная в FileBrowser Quantum до версии 1.4.3-beta, приводит к Path Traversal. Проблема заключалась в том, что эндпоинт GET /api/media/subtitles использовал переданные пользователем параметры path и name при работе с файловой системой без проверки, что позволяло любому авторизованному пользователю читать доступные процессу сервера файлы, включая ключи, учётные данные и конфигурацию. В исправлении разработчики отказались от непосредственного построения пути по входным параметрам: сначала запрашивается информация о доступном пользователю видеофайле и его субтитрах, после чего имя файла берётся из найденной записи, очищается через filepath.Base() и объединяется с директорией разрешённого видеофайла. 🐛 CVE-2026-17497, обнаруженная в NoteGen до версии 0.32.0, приводит к OS Command Injection. Проблема заключалась в том, что приложение по умолчанию разрешало Tauri-плагину shell запускать bash, python и python3 с произвольными аргументами, что позволяло злоумышленнику вызвать plugin:shell|execute и выполнить произвольные команды операционной системы с правами процесса NoteGen. В исправлении разработчики удалили из конфигурации разрешения на выполнение произвольных команд через Tauri Shell Plugin. 🐛 CVE-2026-47752, обнаруженная в Tugtainer до версии 1.30.2, приводит к Server-Side Template Injection (SSTI). Проблема заключалась в том, что поля title_template и body_template обрабатывались обычным окружением jinja2.Environment без изоляции опасных возможностей шаблонизатора, что позволяло авторизованному пользователю получить доступ к объектам Python и выполнить произвольные команды операционной системы с правами root внутри контейнера. В исправлении разработчики заменили jinja2.Environment на SandboxedEnvironment, ограничивающее доступ шаблонов к опасным атрибутам, методам и объектам Python. 🐛 CVE-2026-57531, обнаруженная в Milkdown до версии 7.21.3, приводит к Cross-site Scripting (XSS). Проблема заключалась в том, что обработчик parseDOM.getAttrs сохранял содержимое HTML-элемента span с атрибутом data-type="emoji" без очистки, а при последующей сериализации в Markdown это значение напрямую записывалось в innerHTML, что позволяло злоумышленнику внедрить вредоносный HTML- или JavaScript-код, который выполнялся при обработке вставленного содержимого. В исправлении разработчики добавили очистку HTML перед записью в DOM и исключили использование необработанного содержимого при сериализации. 🐛 CVE-2026-65919, обнаруженная в Meshery до версии 1.0.57, приводит к Path Traversal. Проблема заключалась в том, что эндпоинты /api/system/fileView и /api/system/fileDownload передавали полученный от пользователя параметр file напрямую в os.Open() без проверки пути, что позволяло злоумышленнику прочитать любой файл, доступный процессу Meshery. В исправлении разработчики добавили функцию SafeOpenFile(), которая разрешает чтение только из каталогов журналов ~/.meshery/logs, проверяет нахождение итогового пути внутри разрешённой директории и открывает файл через os.OpenRoot().

Спонсором сегодняшней задержки мемов просьба считать сети связи и их ТСПУ одной северной столицы 🫠 Всем классного (и правиль
+9
Спонсором сегодняшней задержки мемов просьба считать сети связи и их ТСПУ одной северной столицы 🫠 Всем классного (и правильного) завершения вечера и чудесных выходных 🤗

Контейнеры видите? Я разгрузил защитил. Теперь ваша очередь Если вы любите контейнеры — даже когда они не отвечают вам взаимн
+1
Контейнеры видите? Я разгрузил защитил. Теперь ваша очередь Если вы любите контейнеры — даже когда они не отвечают вам взаимностью, — приходите 10–14 августа. Будет хакатон по runtime security, безопасности контейнеров и Kubernetes. Берите толковых пацанов или девчонок. Не больше пятерых. Расследуйте события безопасности в кластерах. Придете один — тоже вариант. Соберем команду на месте. На играх без правил — играйте без правил. С правилами — по правилам Тема такая: сначала регистрация на Standoff 365. Сделайте это сейчас. Не завтра. Сейчас. В начале — у всех все одинаково: найти нужное событие в Runtime Radar, понять контекст, накидать детектор. Но сложность выбираете сами, как в бою игре: 🟢 На изи — ищите событие стандартными фильтрами. 🟡 На нормале — добавьте аналитику, контекстный поиск и дополнительные атрибуты. 🟣На харде — создайте или измените политику мониторинга.
Для тех, кто не в теме: *Runtime Radar — наше опенсорсное решение для защиты контейнеров и мониторинга в реальном времени. Недавно рассказывали, как работает.
Справитесь — шлите все нашим экспертам. Они проверят все. Вообще все. И выберут лучших. Кто победил — тот и победитель. Без вариантов Хакатонить можно где угодно. Под одеялом. В домике в лесу. В хипстерской кофейне. Стоя на двух грузовиках. Но финал — только в офисе Позитива. 14 августа соберем вас там на офлайн-тусовку. Расскажем, кто чего нарешал. Наградим победителей. И просто норм проведем время. Если участвуете — значит, вы участник. Можете выиграть лимитированный мерч и главный приз — цифровой мультитул Flipper Zero. Я сказал (с) Json S. @Positive_Technologies

🔍 Наиболее интересные уязвимости 🐛 CVE-2026-45576, обнаруженная в zrok версий от 0.4.23 до 2.0.3, приводит к Path Traversal. Проблема заключалась в том, что команда zrok2 copy принимала полученные из WebDAV или zrok Drive пути без надёжной проверки и передавала их в FilesystemTarget.WriteStream(), что позволяло выйти за пределы выбранной локальной директории и записать файл в другое место файловой системы. В исправлении разработчики добавили проверку и нормализацию виртуальных путей, а файловые операции перевели на os.OpenRoot(), ограничивающий создание и изменение файлов корневой директорией назначения. 🐛 CVE-2026-54498, обнаруженная в ViewComponent версий от 4.0.0 до 4.12.0, приводит к Cross-site Scripting (XSS). Проблема заключалась в том, что метод around_render мог вернуть небезопасную HTML-строку в обход экранирования, а ViewComponent::Collection#render_in объединял результаты компонентов через join() и безусловно помечал итоговую строку как безопасную с помощью html_safe, что позволяло злоумышленнику внедрить вредоносный HTML- или JavaScript-код, который выполнялся в браузере пользователя. В исправлении разработчики добавили повторную проверку и экранирование результата around_render, а объединение коллекций перевели на safe_join,. 🐛 CVE-2026-16124, обнаруженная в GoClaw до версии 3.15.0-beta.33, приводит к Server-Side Request Forgery (SSRF). Проблема заключалась в том, что защита компонента web_fetch не считала служебные диапазоны 198.18.0.0/15 и 240.0.0.0/4 запрещенными, что позволяло пользователю с доступом заставить сервер отправить запрос на адрес из этих подсетей и тем самым обойти фильтрацию. В исправлении разработчики добавили оба диапазона в списки запрещённых адресов, используемые функциями CheckSSRF и isPrivateIP. 🐛 CVE-2026-44342, обнаруженная в New API до версии 0.12.0-alpha.1, приводит к Cross-Site Request Forgery (CSRF). Проблема заключалась в том, что привязка адреса электронной почты и учётной записи WeChat выполнялась через GET-запросы к /api/oauth/email/bind и /api/oauth/wechat/bind, что позволяло злоумышленнику подготовить ссылку, при переходе по которой браузер авторизованного пользователя отправлял запрос с его сеансовыми файлами cookie и привязывал к аккаунту подконтрольный атакующему адрес или идентификатор WeChat. В исправлении разработчики заменили эти операции на POST-запросы и перенесли коды подтверждения из параметров URL в тело JSON-запроса. 🐛 CVE-2026-53963, обнаруженная в Discourse до версий 2026.1.5, 2026.4.2, 2026.5.1 и 2026.6.0, приводит к Cross-site Scripting (XSS). Проблема заключалась в том, что название второго фактора аутентификации, заданное пользователем, выводилось в диалоге подтверждения удаления без экранирования специальных символов, что позволяло злоумышленнику сохранить и выполнить вредоносный JavaScript-код. В исправлении разработчики добавили экранирование названия второго фактора перед его отображением в интерфейсе с помощью метода escapeExpression().

В славянском фольклоре пятница олицетворялась со святой Параскевой. В народе её часто называли Параскева-Пятница, и она счита
+9
В славянском фольклоре пятница олицетворялась со святой Параскевой. В народе её часто называли Параскева-Пятница, и она считалась защитницей женщин, брака и домашнего очага. Каким образом, при такой-то покровительнице, современная пятница обрела свою правильную часть — видимо уже навсегда останется загадкой для современных историков. Но, как говорится, «было и было». Что ж теперь, обратно всё менять, в самом деле? 🤷‍♂️ Всем чудесного вечера! 🤗(и не забудьте поднять тосты за женщин, брак и домашний очаг, раз уж так вышло)

Repost from SecurityLab.ru
Коллеги, привет! Мы изучаем, как сегодня DevSecOps-, AppSec- и ИБ-специалисты выстраивают процессы безопасности приложений: к
Коллеги, привет! Мы изучаем, как сегодня DevSecOps-, AppSec- и ИБ-специалисты выстраивают процессы безопасности приложений: какие инструменты используют, как принимают решения, что действительно помогает в ежедневной работе, а что, наоборот, создает лишнюю нагрузку. Если вы работаете с AppSec-инструментами - SAST, DAST, SCA и другими - нам очень важно узнать ваш реальный опыт и как процессы безопасной разработки устроены на практике: что удобно, какие задачи возникают чаще всего, какие сценарии автоматизации востребованы и как сегодня развивается AppSec в компаниях. 🕒 Опрос займет 3-5 минут. Все ответы будут использоваться только в обобщенном виде для исследования пользовательских сценариев и развития продуктов. Будем благодарны, если найдете несколько минут и поделитесь своим опытом. Пройти опрос

🔍 Наиболее интересные уязвимости 🐛 CVE-2026-50133, обнаруженная в Hugo до версии 0.162.0, приводит к Cross-Site Scripting (XSS). Проблема заключалась в том, что содержимое файлов с типом text/html без очистки переносилось в сформированную страницу, что позволяло при обработке HTML из недоверенного источника внедрить произвольный JavaScript-код. В исправлении разработчики запретили использование содержимого text/html по умолчанию и добавили проверку типа содержимого через настройку security.allowContent. 🐛 CVE-2026-42153, обнаруженная в Coolify до версии 4.0.0-beta.474, приводит к OS Command Injection. Проблема заключалась в том, что пользовательские значения postgres_user и postgres_db подставлялись в строковую команду проверки работоспособности PostgreSQL, выполняемую через командную оболочку, что позволяло аутентифицированному злоумышленнику внедрить и выполнить произвольные команды. В исправлении разработчики отказались от строковой команды CMD-SHELL и стали запускать psql через CMD с отдельным массивом аргументов. 🐛 CVE-2026-58468, выявленная в NocoBase до версии 2.1.20 включительно, приводит к Server-Side Request Forgery (SSRF). Проблема заключалась в возможности передать URL в узлах рабочих процессов, пользовательских действиях или модуле искусственного интеллекта без проверки значения адреса, что позволяло злоумышленнику заставить сервер обратиться к произвольным хостам. В исправлении разработчики добавили определение опасных адресов и запись предупреждений в журнал, а также расширили применение настройки SERVER_REQUEST_WHITELIST. 🐛 CVE-2026-59149, обнаруженная в Mockoon до версии 9.7.0, приводит к Path Traversal. Проблема заключалась в том, что принадлежность файла разрешённому каталогу проверялась через startsWith() без учёта границы имени директории, что позволяло неаутентифицированному злоумышленнику читать произвольные файлы. В исправлении разработчики заменили строковое сравнение на проверку относительного пути через path.relative(), запретили абсолютные пути и переходы к родительским каталогам, а также исключили использование корня файловой системы в качестве разрешённого каталога для динамически сформированных путей. 🐛 CVE-2026-59834, обнаруженная в SiYuan до версии 3.7.1, приводит к SQL Injection. Проблема заключалась в том, что значения путей, передаваемые в эндпоинт POST /api/search/fullTextSearchBlock, напрямую добавлялись в условия SQL-запроса без параметризации, что позволяло неаутентифицированному злоумышленнику выполнить произвольный SQL код. В исправлении разработчики заменили непосредственную подстановку пользовательских значений в SQL на параметризованные запросы, а также добавили функцию IsValidSearchBoxPath() для проверки корректности идентификаторов блокнотов и путей документов.

+9
Мечтают ли кодинг-агенты о пятницах? Я спросил у своего. Полный ответ приведу в комментариях, но в одном он прав точно:
Для человека Пятница — это символ конца страданий, усталости и порога свободы.
That's my boy 🫂 Шарит ведь, не по годам. Так что... всем поскорее завершить все страдания и переступить «порог свободы», так сказать 🍻

🧩 Принципы и паттерны безопасной разработки: DIP Часть 4. Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) утверждает: модули верхнего уровня не должны зависеть от модулей нижнего уровня, оба должны зависеть от абстракций. При этом не абстракции должны зависеть от деталей, а детали — от абстракций. С точки зрения безопасности, нарушение DIP означает, что высокоуровневая логика (принятие решений, обработка входных данных) жёстко привязана к конкретной низкоуровневой реализации. Когда эта реализация меняется или расширяет поверхность атаки — высокоуровневый модуль наследует проблему автоматически, без какого-либо контроля на своей стороне. 💡 Пример
// С нарушением DIP
class DataBinder {
    void bind(Object target, Map<String,String> params) {
        for (PropertyDescriptor pd :
                Introspector.getBeanInfo(target.getClass())
                    .getPropertyDescriptors()) {
            if (params.containsKey(pd.getName()))
                pd.getWriteMethod().invoke(target, params.get(pd.getName()));
        }
    }
}

// С соблюдением DIP
interface BindablePropertyResolver {
    List<BindableProperty> resolve(Class<?> type);
}

class DataBinder {
    private final BindablePropertyResolver resolver;

    void bind(Object target, Map<String,String> params) {
        for (BindableProperty bp : resolver.resolve(target.getClass())) {
            if (params.containsKey(bp.name()) && bp.isSafe())
                bp.set(target, params.get(bp.name()));
        }
    }
}
Абстракция BindablePropertyResolver контролируется высокоуровневым модулем и определяет контракт: что можно связывать, а что — нет. Даже если интроспекция обнаружит новые свойства, они не станут доступны без явного разрешения. Помимо архитектурного разделения, главным правилом остается биндинг входных данных строго к выделенным DTO (Data Transfer Objects), а не к доменным сущностям или объектам фреймворка. DTO содержит только явно разрешенные поля, что исключает динамический биндинг опасных свойств. Нарушения DIP провоцируют: • CWE-913: Improper Control of Dynamically-Managed Code Resources • CWE-470: Use of Externally-Controlled Input to Select Classes or Code • CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes 🐛 Жизненное CVE-2022-22965 — Spring Framework RCE, она же Spring4Shell (CVSS 9.8). Механизм привязки параметров (data binding) в Spring MVC — высокоуровневый модуль, отвечающий за маппинг HTTP-параметров в свойства Java-объектов. Внутри он напрямую зависит от низкоуровневого Java Beans Introspection API (CachedIntrospectionResults → java.beans.Introspector), рекурсивно обходящего цепочки геттеров/сеттеров. На JDK 8 существовал чёрный список: Spring блокировал доступ к class.classLoader. Но в JDK 9 у Class появился новый геттер — getModule(). Через него открылся обходной путь class.module.classLoader, не попавший в чёрный список. Цепочка: class.module.classLoader.resources.context.parent.pipeline.first.* позволяла модифицировать конфигурацию Tomcat AccessLogValve — атакующий менял путь, паттерн и суффикс лога, записывая на диск JSP-файл (web shell). Нарушение DIP здесь в том, что data binding напрямую зависел от конкретного механизма интроспекции (низкоуровневая деталь), без абстракции, определяющей контракт: какие свойства разрешено связывать. Когда деталь (набор доступных PropertyDescriptor-ов) изменилась из-за развития JDK — поверхность атаки расширилась без единого изменения в коде самого Spring. 🔧 Как пофиксили Spring не стал внедрять глобальный белый список (чтобы не сломать обратную совместимость), и добавил чёрный, на уровне интроспекции. Доступ к свойствам Class, classLoader и protectionDomain был полностью заблокирован, что разорвало опасную цепочку... до следующего витка развития JDK, видимо 😬 💻 Как насчет композиционных языков? Оставим это на правах домашнего задания: подумать, как Rust поощряет DIP через трейты, а Go — делая упор на простоту, снижение шаблонного кода и неявные интерфейсы. ⚠ TL;DR: Если модуль верхнего уровня напрямую зависит от деталей реализации нижнего — любое изменение внизу может молча расширить поверхность атаки наверху. Инвертируйте зависимость: пусть высокоуровневый модуль определяет контракт допустимых данных, а низкоуровневый — реализует его. А на входе всегда используйте DTO.