Уязвимость из JavaScript перекочевала в Python

Независимый исследователь безопасности Абдулрахим Халед недавно поделился подробностями, о найденной им уязвимости в языке программирования Python — высокоуровневый язык программирования общего назначения с динамической строгой типизацией и автоматическим управлением памятью. Он ориентирован на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ.
Язык является полностью объектно-ориентированным.
Необычная особенность языка — выделение блоков кода пробельными отступами.
Синтаксис ядра языка минималистичен, за счёт чего на практике редко возникает необходимость обращаться к документации

» data-html=»true» data-original-title=»Python»>Python, которую он назвал «class pollution» (в дословном переводе «загрязнение класса»). Эта уязвимость интересна тем, что она по своему принципу очень похожа на уязвимость из другого языка программирования —

JavaScript — это язык программирования, с помощью которого web-страницам придается интерактивность. С его помощью создаются приложения, которые включаются в HTML-код. Вся уникальность данного языка программирования заключается в том, что он поддерживается практически всеми браузерами и полностью интегрируется с ними.

» data-html=»true» data-original-title=»JavaScript»>JavaScript. Там она называется «prototype pollution» (в дословном переводе «загрязнение прототипа»).

Исследователь отметил, что уязвимости типа «pollution» чаще всего встречаются в приложениях на JavaScript. Языки на основе классов, такие как Python, кажутся невосприимчивы к такого рода уязвимостям. Однако, Халед сообщил, что лично наблюдал подобную уязвимость в Python, где уязвимость проявилась в «загрязнении» изменяемого атрибута «class». Исследователь также подробно описал, как именно злоумышленник может «загрязнить» любой родительский класс. На схему работы уязвимости можно посмотреть ниже:

По мнению исследователя, потенциально уязвимость может привести к следующим последствиям для веб-приложений Python:

  • Перезапись секретного ключа, используемого для подписи сеансов в веб-приложениях Flask, ручное создание действительных сеансов для проведения атак с захватом учетной записи.
  • Обход фильтров. Например, обход фильтра Jinja — это шаблонизатор для языка программирования Python, который используется для генерации динамических HTML, XML и других типов файлов.
    Jinja позволяет настраивать теги, фильтры, тесты и глобальные переменные. В отличие от шаблонизатора Django, Jinja позволяет конструктору шаблонов вызывать функции с аргументами на объектах.

» data-html=»true» data-original-title=»Jinja»>Jinja при попытке загрузить файл шаблона. Это позволит злоумышленникам загружать файлы из любого локального каталога, не ограничиваясь каталогом шаблонов.

  • Удаленное выполнение команды путем перезаписи переменных среды COMSPEC или PATH.
  • «Я ожидаю скоро увидеть похожие уязвимости и в других языках программирования», — выразил своё опасение Абдулрахим Халед.

    Источник