Positive Development Community – Telegram
Positive Development Community
3.14K subscribers
1.43K photos
226 videos
4 files
464 links
Download Telegram
Трейд-оффы современных языков программирования

Надеюсь, никакой ящик Пандоры я этим постом не открою... 🫣 Для контекста:

Rust неплохой язык, на нём интересно писать… пет-проекты в соло и то, для чего раньше стоило бы взять C/C++. Для наших прототипов и нетребовательного прода — всё ещё Python, для всего остального — Go.


Последнее время плотно занимаюсь оценкой фичей безопасности, которые предлагают те или иные языки программирования и экосистемы. Пост (точнее — статью) об этом попозже обязательно опубликую, а пока захотелось поделиться побочным результатом этого ресерча: сравнением популярных языков в рамках «дешево-быстро-безопасно — выбери любые два».

Для каждого языка сформулировал оценку по 10-бальной шкале, относительно трех критериев разработки:

Совокупная стоимость. Интегральная оценка по всем видам затрат, к которым приводит разработка на этом языке: оптимальная численность и стоимость команд, затраты на тестирование, инфру и поддержку.

Скорость. По сути — временная стоимость стори-поинта в проекте медианной сложности (веб, энтерпрайз, облака).

Безопасность. Уровень безопасности, гарантируемый стандартной поставкой языка и его рантайма.

Проставляя оценки по первым двум критериям, опирался на материалы, наиболее интересные из которых, приведены ниже. Там, где не получалось опираться, давал субъективную оценку, исходя из собственного опыта. Оценку по третьему критерию брал из упомянутого выше ресерча, основанного большей частью на аналитике по спекам и докам языков, и их экосистем, и CVE, которыми страдали написанные на них проекты.

Там, где семейство языков объединено единой экосистемой (.NET, JVM, Node) рассматривал общие для всего семейства свойства, т.к. глубоко убежден, что хотя конкретные языки и могут отличаться друг от друга по заданным критериям, определяющим фактором здесь остается все же их экосистема.

Затем, с помощью полученных оценок, plotly.js и такой-то матери ChatGPT, сделал визуализацию всего этого, скрины которой вы видите выше. Для желающих покрутить 3D-сцену мышкой, скину в комментах HTML.

Примечательно то, что никак не подгоняя изначально данные оценки, и построив по ним на диаграммах Pareto Front (по всем трем критериям), получил ровно три языка, упомянутые в цитате из своих новогодних инсайтов. Pareto Front в данном случае обозначает языки, представляющие все рационально допустимые компромиссы при выборе стека (говоря иными словами — остальные нет смысла учитывать при выборе по этим критериям, т.к. результат будет заведомо хуже).

Разумеется, когда, например, есть готовая и сработавшаяся команда, особенно с уже существующей и стабильной кодовой базой, критерии и способ их подсчета должны быть уже слегка другие. Так что, эти диаграммы скорее о том, на какие языки стоит ориентироваться при старте новых проектов с абсолютного нуля, как минимум.

📰 Материалы, помогавшие делать оценку (заслуживающие внимания):

Top 8 Most Demanded Programming Languages
The 9 cost factors
What Is the Most Secure Coding Language?
2025 Stack Overflow Developer Survey
Which Programming Language Has the Most Vulnerabilities?

TL;DR: в любой непонятной ситуации используйте Python, Go или Rust. В любой понятной — выбирайте язык с умом, под задачу, команду и предметную область. C/C++ не используйте, если можете 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍6👎43🔥2😐1
🔍 Наиболее интересные уязвимости

🐛 CVE-2026-23626, обнаруженная в Kimai в версиях до 2.46.0, приводит к Server-Side Template Injection (SSTI). Проблема заключалась в том, что Twig Sandbox использовал слишком разрешительную политику безопасности (DefaultPolicy), из-за чего аутентифицированный пользователь мог извлекать чувствительные данные. В исправлении DefaultPolicy жёстко ограничили допустимые вызовы: запретили доступ к ServerBag и SessionInterface, для AppVariable оставили только getRequest/getUser/getLocale, а у User явно заблокировали методы, возвращающие секреты

🐛 CVE-2026-0858, выявленная в plantuml до версии 1.2026.0, приводит к Cross-site Scripting (XSS). Проблема заключалась в возможности злоумышленника внедрить произвольный JS-код в генерируемый SVG через PlantUML-схемы и выполнить его в контексте приложения. В исправлении убрали генерацию SVG.

🐛 CVE-2026-23527, выявленная в H3 до версии 1.15.5, приводит к HTTP Request Smuggling. Уязвимость обусловлена тем, что метод readRawBody() проверял заголовок Transfer-Encoding на наличие значения chunked регистрозависимо, что позволяло обойти логику парсинга тела запросов и создать условия для десинхронизаци. В исправлении проверку заменили на регистронезависимую c помощью /\bchunked\b/i.test().

🐛 CVE-2026-22812, обнаруженная в OpenCode до версии 1.0.216, приводит к Remote Code Execution (RCE). Проблема заключалась в возможности выполнения произвольных команд через HTTP-сервер, к которому можно было обратиться с произвольного адреса из-за неправильных настроек CORS. В исправлении в настройки CORS добавили "белый" список адресов с которых можно отправлять запросы: разрешается только для http://localhost:*, http://127.0.0.1:* и https://*.opencode.ai.

🐛 CVE-2026-23745, обнаруженная в node-tar в версиях до 6.2.3, приводит к Path Traversal. Проблема заключалась в том, что при preservePaths=false значение entry.path проверялось на наличие символов обхода пути, но для entry.linkpath аналогичная проверка не производилась, из-за чего злоумышленник мог добиться записи файлов вне директории распаковки. В исправлении валидацию вынесли в отдельную процедуру и применили её и к path, и к linkpath: запрещают .. в сегментах и корректно убирают абсолютный префикс у обоих полей.
1👍1
У всех закрыты все тикеты в таск-трекере? 😬 Ну и правильно, пятница же, тут о другом пора подумать... 🍺🕺
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13❤‍🔥5🔥1💔1
🔍 Наиболее интересные уязвимости

🐛 CVE-2026-24490, обнаруженная в MobSF в версиях до 4.4.5, приводит к Cross-Site Scripting (XSS). Проблема заключалась в том, что при разборе AndroidManifest.xml MobSF вытаскивал значение android:host и подставлял его напрямую в HTML-строку заголовка отчёта, что позволяло выполнить произвольный JS код при анализе apk-файла. В исправлении добавили экранирование значений из AndroidManifest.xml с помощью внутреннего метода escape_manifest_attribute()

🐛 CVE-2026-23524, обнаруженная в Laravel Reverb в версиях 1.6.3 и ниже, приводит к Remote Code Execution (RCE). Проблема заключалась в том, что данные из Redis-канала напрямую передавались в unserialize() без ограничений, из-за чего злоумышленник мог инициировать десериализацию произвольных объектов. В исправлении вызовы unserialize() перевели на режим "белых" списков: добавили ['allowed_classes' => [Application::class]] для application и ['allowed_classes' => [Application::class, PendingMetric::class, MetricType::class]] для payload, тем самым запретив десериализацию произвольных объектов.

🐛 CVE-2025-13465, обнаруженная в lodash в версиях 4.0.0–4.17.22, приводит к Prototype Pollution. Проблема заключалась в том, что через операции вроде _.unset/_.omit можно было удалять методы из глобальных прототипов, что открывает путь к модификации поведения объектов в приложении. В исправлении переработали метод baseUnset(): ограничили доступ к ключу proto, а также к constructor.prototype.

🐛 CVE-2026-23947, обнаруженная в Orval в версиях до 7.19.0 (ветка 7.x) и до 8.0.2 (ветка 8.x), приводит к Remote Code Execution (RCE). Проблема заключалась в том, что значения ключа x-enumDenoscriptions попадали в генерируемый TypeScript-код без корректного экранирования, что позволяло внедрить произвольный JS/TS в итоговые файлы. В исправлении добавили экранирование x-enumNames и x-enumDenoscriptions с помощью метода jsStringEscape().

🐛 CVE-2025-64087, обнаруженная в xdocreport в версиях с 1.0.0 по 2.1.0, приводит к Server-Side Template Injection (SSTI). Проблема заключалась в том, что злоумышленник мог выполнять произвольный код путем внедрения специально созданных выражений шаблонов. В исправлении добавили механизмы безопасности в конфигурацию: выставили Configuration.NEW_BUILTIN_CLASS_RESOLVER_KEY в значение "safer", чтобы заблокировать опасную инстанцирование классов через оператор ?new.
👍2
🤝 Пара интересных RCE в n8n

Похоже, за n8n взялись всерьез (ну... неудивительно). Если дело так пойдет и дальше, придется заводить под их уязвимости отдельную рубрику.

Разбор упомянутых CVE в деталях можно почитать здесь, «из первых рук», так сказать. В чем суть, вкратце. Обе RCE — ответочка от jFrog на уже реализованные разработчиками n8n меры по устранению ранее обнаруженных уязвимостей, которые в итоге и привели к новым CVE-2026-1470 и CVE-2026-0863. Дело в том, что когда возможность выполнения пользователями <относительно> произвольного кода становится официальной фичей, вопрос безопасной реализации подобной функциональности слегка усложняется. Разработчики n8n пошли по пути синтаксической валидации пользовательского кода на уровне AST в обоих случаях (JavaScript, Python): код разбирается в синтаксическое дерево, дерево обходится визитором, осуществляющим детектирование потенциально опасных узлов.

И это — фиговое решение, как минимум по двум причинам.

1️⃣ Во-первых, по своей сути — это контроль по черным спискам. Собственно, патчи к этим уязвимостям (раз, два) разработчики свели к добавлению в эти списки техник атак, продемонстрированных ресерчерами jFrog. Сколько ещё вариантов поиграться с синтаксисом этих языков для подобных RCE существует прямо сейчас — думаю, jFrog'и скоро расскажут. А, как скоро в новых версиях языков появятся конструкции, не предусмотренные в черных списках n8n, но позволяющие выстроить гаджеты для вот таких RCE — покажет время.

2️⃣ Во-вторых, проверки на уровне AST — это синтаксическая валидация. У всех языков, помимо синтаксиса, есть ещё и семантика. А у динамических языков (коими являются, и JavaScript, и Python), некоторая её часть является сущностью времени выполнения. И эта часть НЕ МОЖЕТ быть эффективно проанализирована статическими проходами по синтаксическому представлению. Иными словами, даже белые списки (исходя из того, что в них было бы необходимо разрешить в свете соответствующих фич n8n) здесь не позволили бы закрыть все потенциальные проблемы.

🤓 Как правильно работать с такими кейсами?

Простых решений, здесь, увы можно не ожидать. По возрастанию упоротости трудозатрат на реализацию:

1. Если есть возможность влиять на язык, используемый для скриптов, то взять ограниченный валидацией по белым спискам (разрешенные синтаксические конструкции, пространства имен и типы) статический язык с сильной типизацией. Из известных мне языков на эту роль лучше всего подходит C# Scripting.

2. На этапе прохода по AST инструментировать код проверками на допустимость операций, которые будут осуществляться в рантайме, во время выполнения скрипта. В идеале библиотека рантайма и используемые сторонние библиотеки также должны быть инструментированы (реализацию можно подсмотреть в OpenTelemetry, например). В пределе — это приведет к разработке собственного RASP, заточенного под фичи скриптинга конкретного проекта.

3. Использовать собственноручно пропатченные интерпретаторы, допускающие только разрешенные синтаксис и семантику. Настолько сложно, что в большинстве случаев нецелесообразно.

Ну и, безотносительно способа первичной защиты: выполнять все пользовательские скрипты в изолированных контейнерах: как минимум — в Docker, как рациональный максимум — в условном FireCracker'е.

TL;DR: разработчики n8n думают, что устранили ещё две RCE, но есть нюанс. И простого способа его обойти у них нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
Forwarded from Positive Technologies
😎 Проверим, в безопасности ли ваше веб-приложение, и посоветуем — что делать, если нет

С этим отлично справится обновленный PT BlackBox Scanner, который проведет больше 110 проверок, а потом порекомендует, что делать с обнаруженными недостатками. Для этого мы разработали и встроили в него собственную LLM.

Она просто и доступно расскажет, откуда у вас взялись эти уязвимости, и предложит способы их пофиксить, приводя примеры корректного кода и конфигураций.


Из крутого: это бесплатно и несложно! Просто введите адрес вашего приложения на сайте сервиса.

❗️ ВАЖНО: перед сканированием нужно подтвердить, что именно вы владелец сайта, который проверяете. Базовая проверка доступна по умолчанию, а для более продвинутого сканирования понадобится регистрация.

@Positive_Technologies
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍6🔥3👎2
«Последняя пятница месяца не менее важна, чем следующая за ней первая» (с) Аристотель.

Всем чудесно завершить этот важный день, и поскорее начать готовиться к следующему 🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁164👍4❤‍🔥2