Несправедливо конечно, что мемы публикуются тогда, когда неправильная часть пятницы заканчивается у админа, а не у всех остальных. С другой стороны, жизнь вообще несправедлива, а посмотреть мемы никогда не поздно 🙂
Всем чудесного завершения пятницы и классных выходных🤗
Всем чудесного завершения пятницы и классных выходных
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8💔4❤3😁1
🔍 Наиболее интересные уязвимости
🐛 CVE-2026-28291, обнаруженная в simple-git (версии до 3.31.1 включительно), приводит к OS Command Injection. Проблема заключалась в обходе блокировки опасных опций через манипуляцию параметрами, что позволяло выполнять произвольные команды. В исправлении разработчики отказались от проверки только точного шаблона
🐛 CVE-2026-30232, обнаруженная в Chartbrew (до версии 4.8.5), приводит к Server-side Request Forgery (SSRF). Уязвимость обусловлена тем, что аутентифицированный пользователь мог создать API connection с URL без проверки, что позволяло выполнять запросы к произвольным ресурсам. В исправлении был добавлен введён флаг
🐛 CVE-2026-40351, обнаруженная в FastGPT (версии до 4.14.9.5), приводит к NoSQL injection. Проблема заключалась в использовании TypeScript type assertion без проверки на этапе выполнения, что позволяло передать оператор запроса MongoDB в поле пароля и обойти проверку. В исправлении была добавлена runtime-валидация тела запроса через
🐛 CVE-2026-40491, обнаруженная в gdown (версии до 5.2.2), приводит к Path Traversal. Проблема заключалась в отсутствии проверки имен файлов в архивах ZIP или TAR, что позволяло записывать файлы за пределами целевой директории. В исправлении была добавлена санитизация с помощью
🐛 CVE-2026-41242, обнаруженная в protobuf.js до версий 8.0.1 и 7.5.5, приводит к Remote Code Execution (RCE). Проблема заключалась в том, что злоумышленник мог внедрить произвольный код в поле
🐛 CVE-2026-28291, обнаруженная в simple-git (версии до 3.31.1 включительно), приводит к OS Command Injection. Проблема заключалась в обходе блокировки опасных опций через манипуляцию параметрами, что позволяло выполнять произвольные команды. В исправлении разработчики отказались от проверки только точного шаблона
-u и добавили более общую проверку clone-опций через CLONE_OPTIONS и isCloneSwitch(), чтобы блокировать разные варианты передачи опасного параметра.🐛 CVE-2026-30232, обнаруженная в Chartbrew (до версии 4.8.5), приводит к Server-side Request Forgery (SSRF). Уязвимость обусловлена тем, что аутентифицированный пользователь мог создать API connection с URL без проверки, что позволяло выполнять запросы к произвольным ресурсам. В исправлении был добавлен введён флаг
allowPrivateHost, чтобы обращения к внутренним адресам больше не проходили по умолчанию и разрешались только явно.🐛 CVE-2026-40351, обнаруженная в FastGPT (версии до 4.14.9.5), приводит к NoSQL injection. Проблема заключалась в использовании TypeScript type assertion без проверки на этапе выполнения, что позволяло передать оператор запроса MongoDB в поле пароля и обойти проверку. В исправлении была добавлена runtime-валидация тела запроса через
zod, и поля username и password теперь принимаются только как строки.🐛 CVE-2026-40491, обнаруженная в gdown (версии до 5.2.2), приводит к Path Traversal. Проблема заключалась в отсутствии проверки имен файлов в архивах ZIP или TAR, что позволяло записывать файлы за пределами целевой директории. В исправлении была добавлена санитизация с помощью
_sanitize_filename(), проверка путей через realpath() и _is_within_directory().🐛 CVE-2026-41242, обнаруженная в protobuf.js до версий 8.0.1 и 7.5.5, приводит к Remote Code Execution (RCE). Проблема заключалась в том, что злоумышленник мог внедрить произвольный код в поле
type protobuf-определения, после чего этот код выполнялся во время декодирования объекта с использованием такого определения. В исправлении разработчики добавили фильтрацию имени типа через name.replace(/\W/g, ""), чтобы удалять все неалфавитно-цифровые символы перед дальнейшей обработкой.👍3
Forwarded from Искусство. Код... ИИ?
🧩 Принципы и паттерны безопасной разработки: LSP
Часть 2.
Продолжаем разбор SOLID... на очереди — принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP). Формально он гласит: объекты подклассов должны быть способны заменить объекты базовых классов без нарушения корректности программы. Проще говоря, наследник не должен «ломать» контракт, установленный родителем — ни в предусловиях (не требовать большего), ни в постусловиях (не гарантировать меньшего), ни в инвариантах (не нарушать постоянных условий).
Что неочевидно для многих, благодаря дядюшке Мартину, так это то, что LSP является поведенческим принципом, а не структурным. Иными словами, чтобы нарушить его, наследование (да и ООП в целом) — вообще не нужно. Если у нас есть одна сущность, переопределяющая поведение другой, и при этом к ней можно обратиться, как к исходной — этого достаточно. Даже, если сущности — результат функциональной композиции, без каких-либо объектов в терминах ООП в целом. Пример того, как LSP выглядит в языках, не имеющих наследования, можно посмотреть тут.
С точки зрения безопасности, нарушение LSP — это прямая дорога к обходу защитных механизмов. Когда подкласс изменяет семантику безопасности базового класса (например, отключает проверку прав доступа или меняет логику валидации), код, написанный с расчётом на родительский контракт, начинает работать непредсказуемо. Это порождает логические уязвимости, которые сложно отловить статическим анализом, поскольку формально типы совместимы, а вот их поведение — нет.
Как правило, нарушения LSP могут повлечь за собой примерно любые уязвимости, так или иначе связанные с логикой работы приложения. «В природе», однако, чаще всего они относятся ко следующим категориям:
• CWE-264: Permissions, Privileges, and Access Controls
• CWE-284: Improper Access Control
• CWE-290: Authentication Bypass by Spoofing
• CWE-703: Improper Check or Handling of Exceptional Conditions
🐛 Жизненное
CVE-2025-22223 — Spring Security (Authentication Bypass by Spoofing).
Когда аннотация безопасности (
Нарушение LSP здесь в том, что родительский тип объявляет контракт «этот метод требует роли ADMIN». Подкласс переопределяет метод, и контракт безопасности молча пропадает. При подстановке подкласса вместо родителя предусловие (авторизация) ослабляется.
Патч (коммит dc2e1af). Наивный поиск
❗️ Что делать?
• Помечайте security-critical классы как
• Аннотации безопасности дублируйте на каждом переопределяющем методе.
• Фильтруйте и определяйте сущности по их типу, а не по имени.
• Соблюдайте явным образом все поведенческие контракты переопределяемых методов.
• Обеспечивайте инварианты объекта даже при аварийном завершении конструктора или инициализации.
⚠ TL;DR: В целом, общий принцип один: если ваш код принимает сущность по ссылке на базовую реализацию, он неявно доверяет поведенческому контракту этой сущности. Убедитесь, что это обосновано — особенно на границах доверия между компонентами системы.
Часть 2.
Продолжаем разбор SOLID... на очереди — принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP). Формально он гласит: объекты подклассов должны быть способны заменить объекты базовых классов без нарушения корректности программы. Проще говоря, наследник не должен «ломать» контракт, установленный родителем — ни в предусловиях (не требовать большего), ни в постусловиях (не гарантировать меньшего), ни в инвариантах (не нарушать постоянных условий).
Что неочевидно для многих, благодаря дядюшке Мартину, так это то, что LSP является поведенческим принципом, а не структурным. Иными словами, чтобы нарушить его, наследование (да и ООП в целом) — вообще не нужно. Если у нас есть одна сущность, переопределяющая поведение другой, и при этом к ней можно обратиться, как к исходной — этого достаточно. Даже, если сущности — результат функциональной композиции, без каких-либо объектов в терминах ООП в целом. Пример того, как LSP выглядит в языках, не имеющих наследования, можно посмотреть тут.
С точки зрения безопасности, нарушение LSP — это прямая дорога к обходу защитных механизмов. Когда подкласс изменяет семантику безопасности базового класса (например, отключает проверку прав доступа или меняет логику валидации), код, написанный с расчётом на родительский контракт, начинает работать непредсказуемо. Это порождает логические уязвимости, которые сложно отловить статическим анализом, поскольку формально типы совместимы, а вот их поведение — нет.
Как правило, нарушения LSP могут повлечь за собой примерно любые уязвимости, так или иначе связанные с логикой работы приложения. «В природе», однако, чаще всего они относятся ко следующим категориям:
• CWE-264: Permissions, Privileges, and Access Controls
• CWE-284: Improper Access Control
• CWE-290: Authentication Bypass by Spoofing
• CWE-703: Improper Check or Handling of Exceptional Conditions
🐛 Жизненное
CVE-2025-22223 — Spring Security (Authentication Bypass by Spoofing).
Когда аннотация безопасности (
@PreAuthorize) размещена на методе обобщённого суперкласса или интерфейса, и конкретный подкласс переопределяет этот метод, механизм UniqueSecurityAnnotationScanner не находит аннотацию на переопределённом методе. Причина -- использование targetClass.getDeclaredMethod(method.getName(), method.getParameterTypes()) для поиска, что не работает после стирания типов (type erasure): сигнатура родительского метода Object mutate(Object) не совпадает с сигнатурой конкретной реализации AccountSecret mutate(AccountSecret).public abstract class BaseService<T> {
@PreAuthorize("hasRole('ADMIN')")
public abstract T getResource(Long id);
}
// Подкласс -- Spring Security не видит аннотацию
public class UserService extends BaseService<User> {
@Override
public User getResource(Long id) {
return userRepo.findById(id);
}
}Нарушение LSP здесь в том, что родительский тип объявляет контракт «этот метод требует роли ADMIN». Подкласс переопределяет метод, и контракт безопасности молча пропадает. При подстановке подкласса вместо родителя предусловие (авторизация) ослабляется.
Патч (коммит dc2e1af). Наивный поиск
getDeclaredMethod заменен на итерацию по всем методам класса с разрешением обобщённых типов.• Помечайте security-critical классы как
final|sealed или явно контролируйте наследование.• Аннотации безопасности дублируйте на каждом переопределяющем методе.
• Фильтруйте и определяйте сущности по их типу, а не по имени.
• Соблюдайте явным образом все поведенческие контракты переопределяемых методов.
• Обеспечивайте инварианты объекта даже при аварийном завершении конструктора или инициализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть особый челлендж в том, чтобы поймать тот скоротечный момент, когда неправильная часть пятницы уже закончилась, а правильная ещё не началась.
...и успеть в нём запостить мемы.
Всем приятного вечера и хорошенько отдохнуть на выходных!🥳
...и успеть в нём запостить мемы.
Всем приятного вечера и хорошенько отдохнуть на выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👍8❤3
🔍 Наиболее интересные уязвимости
🐛 CVE-2026-33626, обнаруженная в LMDeploy (версии до 0.12.3), приводит к Server-side Request Forgery (SSRF). Проблема заключалась в том, что функция
🐛 CVE-2026-40565, обнаруженная в FreeScout (версии до 1.8.213), приводит к Cross-site Scripting (XSS). Проблема заключалась в том, что функция
🐛 CVE-2026-41229, обнаруженная в Froxlor (версии до 2.3.6), приводит к Remote Code Execution (RCE). Проблема заключалась в отсутствии экранирования одиночных кавычек в строковых литералах PHP, что позволяло внедрять произвольный PHP-код через параметр
🐛 CVE-2026-41304, обнаруженная в WWBN AVideo (версии 29.0 и ниже), приводит к OS Command Injection. Проблема заключалась в конкатенации пользовательского ввода в команду
🐛 CVE-2026-29050, обнаруженная в melange (версии с 0.32.0 до 0.43.4), приводит к Path Traversal. Проблема заключалась в возможности передаче значения
🐛 CVE-2026-33626, обнаруженная в LMDeploy (версии до 0.12.3), приводит к Server-side Request Forgery (SSRF). Проблема заключалась в том, что функция
load_image() позволяла загружать изображения по URL без проверки значений адресов, что позволяло доступ к произвольным хостам. В исправлении была добавлена функция _is_safe_url(), которая разрешает только схемы http/https, извлекает hostname, резолвит все IP-адреса через socket.getaddrinfo() и блокирует любые не global адреса с помощью is_global🐛 CVE-2026-40565, обнаруженная в FreeScout (версии до 1.8.213), приводит к Cross-site Scripting (XSS). Проблема заключалась в том, что функция
linkify() в app/Misc/Helper.php не экранировала кавычки в URL, позволяя внедрять произвольные HTML-атрибуты. В исправлении значения для href и отображаемого текста ссылки стали обрабатываться через htmlspecialchars(..., ENT_QUOTES, 'UTF-8') перед генерацией тега <a>.🐛 CVE-2026-41229, обнаруженная в Froxlor (версии до 2.3.6), приводит к Remote Code Execution (RCE). Проблема заключалась в отсутствии экранирования одиночных кавычек в строковых литералах PHP, что позволяло внедрять произвольный PHP-код через параметр
privileged_user. В исправлении разработчики добавили экранирование обратных слешей и одинарных кавычек в parseArrayToString(), а также ввели отдельную валидацию privileged_user по регулярному выражению и нормализацию mysql_ca.🐛 CVE-2026-41304, обнаруженная в WWBN AVideo (версии 29.0 и ниже), приводит к OS Command Injection. Проблема заключалась в конкатенации пользовательского ввода в команду
wget через exec(), что позволяло внедрять shell-команды с помощью метасимволов. В исправлении аргументы команды стали экранироваться через escapeshellarg()🐛 CVE-2026-29050, обнаруженная в melange (версии с 0.32.0 до 0.43.4), приводит к Path Traversal. Проблема заключалась в возможности передаче значения
pipeline[].uses с последовательностями обхода пути в filepath.Join() без проверки, что позволяло обращаться к произвольным файлам в системе. В исправлении разработчики запретили абсолютные пути и наличие символов обхода пути в uses, а также добавили дополнительную проверку через filepath.Rel() после filepath.Clean()👍4❤2