Записки потомственного it'шника
275 subscribers
509 photos
40 videos
204 files
1.65K links
Краткость — сестра таланта.
Автоматизация — мать порядка.
Ransomware'щики — боги.
Батя — программист over 80+ level.
Мать — бухгалтер, соскачившая с цифр на контдитерские изделия.
Ну а я — бакалавр ИБ по собственной воле.
Update: уже магистр.
Download Telegram
Forwarded from Пост Импакта
#api #params

> Ничего не могу найти на сайте, может ещё что-то посмотреть?

Иногда встречается сайт, на котором всего лишь несколько конечных точек. Казалось, все параметры были проверены на уязвимости, а в чек-листе отмечены любые возможные проверки на инъекции и логику.

Однако, бывают уязвимости, которые не видны с первого взгляда. Например (CAPEC-460) HTTP Parameter Pollution или (CWE-472) External Control of Assumed-Immutable Web Parameter. Данные ошибки возникают из-за неожиданного поведения в функциях обработки параметров.

Давайте рассмотрим первую атаку HTTP Parameter Pollution, она состоит из возможности добавления повторяющихся параметров с помощью специальных разделителей запроса.

Например, у нас открыт сайт по продаже арбузов в браузере

🌐 example.com/profile.jsp?client_id=1

Для кнопки "Открыть профиль" устанавливается динамически в ответе от сервера html:

<a href="profile.jsp?client_id=1&action=view

А теперь изменим запрос добавив в него параметр и закодировав разделитель & как %26:

🌐 example.com/profile.jsp?client_id=1%26action%3Ddelete

В результате для кнопки "Открыть профиль" задаётся html:

<a href="profile.jsp?client_id=1&action=delete&action=view

При нажатии на кнопку — профиль пользователя будет удалён. Для того чтобы заставить жертву удалить свой аккаунт, нам нужно отправить ей ссылку и подождать.

Это происходит, потому что Apache Tomcat 🐈 при анализе двух одинаковых параметров (action) берёт значение первого:

&action=delete&action=view

Вот так выглядит код на стороне сервера:

String client_id = request.getParameter("client_id");
GetMethod get = new GetMethod("https://example.com/profile");
get.setQueryString("client_id=" + client_id + "&action=" + action);
href_link=get.URL;

Разработчик должен был учесть такое поведение и проверить возможность внедрения параметра action в client_id

Вообще, приоритет и процесс обработки параметров можно взять из этой таблицы ниже:

Technology/HTTP backend        | Parsing Result    | Example         |
---------------------------------------------------------------------
ASP.NET/IIS | All occurrences | par1=val1,val2 |
ASP/IIS | All occurrences | par1=val1,val2 |
PHP/Apache | Last occurrence | par1=val2 |
JSP Servlet/Apache Tomcat | First occurrence | par1=val1 |
JSP Servlet/Oracle Application | First occurrence | par1=val1 |
IBM HTTP Server | First occurrence | par1=val1 |

Так, для Server: Apache Tomcat будет взято значение из первого совпадения action=delete
А для Server: Apache значение уже будет action=view — последний параметр

Но не все сервера используют приоритет порядка, так, например, ASP.NET/IIS конкатенирует значения. Поэтому в случаях, когда выполнению XSS мешает санитизация или WAF, можно составить следующий payload:

example.com/search?param=<audio/n="&param="src/onerror=alert()>

В результате на странице html будет <audio n="," src/onerror=alert()> и XSS успешно сработает 💣

Помимо приоритетов, нужно также вспомнить о разделителях для параметров. Существует не только привычный & (амперсанд) и , (запятая) но и ряд других символов, тут нужно обратиться к стандартам и поискать реализации. Если открыть (rfc6570) URI Template можно найти Path-Style Parameter

Обычный URL будет следующим:

example.com/users?role=admin&firstName=N

А теперь преобразуем его в вид Path-Style:

example.com/users;role=admin;firstName=N

Использование в качестве разделителя ; (точки с запятой) не повсеместно. Это приводит к различиям обработки во фреймворках и как следствие к уязвимостям, в частности, на микросервисных архитектурах:

• CVE-2021-23336 — Python библиотека urllib.parse.parse_qsl не игнорирует точку с запятой.

• ParseThru — Go библиотека net/url не игнорирует точку с запятой и выводит предупреждение http: URL query contains semicolon...

Следует помнить, что уязвимость HTTP Parameter Pollution может возникать не только в URL, но и в любой части POST/GET запроса, а также в теле JSON.

{"client_id":4, "client_id":17, "action":"delete"}
🔥1
У Алексея Лукацкого сегодня был интересный пост про "H.R.7900 - National Defense Authorization Act for Fiscal Year 2023". Длиннющий документ. Местами видимо интересный. Если в PDF выгружать, то там 3854 страницы. Слово "Russia" там встречается 281 раз. Солидно. 🙂 "China" только 130 раз.

Алексей Викторович обратил внимание, что теперь согласно "SEC. 6722. DHS SOFTWARE SUPPLY CHAIN RISK MANAGEMENT." контракторам Department of Homeland Security (DHS) придется собирать зависимости их продуктов в "bill of materials" и доказывать сертификатом, что ни в одной из зависимостей нет ни одной уязвимости из NVD. Не то, что там критичных уязвимостей нет, а вообще никаких CVE нет!

Практика занимательная. Учитывая с какой скоростью выходят новые уязвимости это получается, что по-хорошему нужно будет постоянно пересобирать продукт и тестить, что ничего не разъехалось, чтобы к моменту сертификации быть максимально свеженькиими и неуязвимыми. Сомневаюсь, что кто-то реально сможет честно пройти такую сертификацию буквально так, как это написано. Но если да, было бы интересно посмотреть на этих монстров разработки, тестирования и автоматизации. 🙂 Хотя по сути так было бы правильно.

Ну и там вроде не конкретизировано кто и как именно должен процедуру сертификации проводить, так что могут быть нюансы. 😏

Но меня больше зацепило, что там речь идет не только об NVD, но и

"(B) any database designated by the Under Secretary, in coordination with the Director of the Cybersecurity and Infrastructure Security Agency, that tracks security vulnerabilities and defects in open source or third-party developed software."

Это что такое? Это просто вставочка на будущее, типа вдруг когда-нибудь сделают ещё какую-нибудь базу? Или есть какая-то ещё база уязвимостей Open Source софта разработанная DHS и CISA, которая не в паблике? Загадочно. 🙂

PS: Надо бы тамошним законодателям рассказать, что у каждого item в "bill of materials" могут быть свои зависимости, и в этих зависимостях могут быть (и есть) уязвимости, а для самого item-а в NVD об этом никакой информации не будет. Как не было отдельной CVE под каждый софт уязвимый Log4Shell. Даешь "bill of materials" для каждого item-а и тотальный разбор этой адской матрешки! Муа-ха-ха! 😈

@avleonovrus #VMnews #OpenSource #DHS
Forwarded from HackGit
​​crAPI

completely ridiculous API (crAPI) will help you to understand the ten most critical API security risks. crAPI is vulnerable by design, but you'll be able to safely run it to educate/train yourself.

https://github.com/OWASP/crAPI
Forwarded from SHADOW:Group
​​📚 Материалы с недавних конференций по ИБ

Список материалов с прошедших недавно конференций по информационной безопасности.

▫️ BlackHat (только слайды)
▫️ Defcon
▫️ BSidesLV
▫️ Troopers
▫️ ARE41
▫️ SANS ransomware summit
▫️ May Contain Hackers

#redteam
Forwarded from Пост Импакта
top_application_programming_interface_directories.txt
399.5 KB
#api #wordlist

Раньше мы выполняли брутфорс только для статических файлов и папок. Но в современных реалиях, мы всё больше встречаем приложения, которые работают посредством конечных точек API. Это означает, что подход должен меняться, давайте рассмотрим специфику.

Возьмём, в качестве примера, запрос на удаление аккаунта пользователя:

DELETE /api/v1/users/<int> HTTP/2
Host: example.com
Content-Type: application/xml

HTTP/2 200 OK
Connection: close

1. Для того чтобы обнаружить эту конечную точку, в словаре должны быть сущности : api, v1, users
2. Вам нужно в запросе использовать метод DELETE
3. Поставить верный Content-Type
4. В последнем пути — нужно добавить число.

В противном случае ответ будет: 404 Not Found

Из этого следует, что нужен хороший словарь, специфичный для API, а также ротация методов GET, POST, DELETE, etc.

При брутфорсе нас интересуют следующие поля (%s):

%s /api/v1/%s/<int> HTTP/2
Host: example.com
Content-Type: %s


Поскольку обычные словари не нацелены на API спецификацию, я собрал свой. Для этого использовал замечательный массив данных от Assetnote из 67 500 файлов Swagger, собранных с помощью Google BigQuery.

Нарезал сущности и отфильтровал их по популярности — файл прикреплён к посту.
Forwarded from SecAtor
В первую декаду августа прошла конференция по безопасности Black Hat, на которой была раскрыта уязвимость в ядре Linux под названием Dirty Cred.

Об уязвимости поведали пытливые умы из Университета Нортуэстерн, которые работали над печально известной багой Dirty Pipe и обнаружили ошибку восьмилетней давности, с помощью которой злоумышленник может повысить свои права до максимального уровня.

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

Для повышения привилегий DirtyCred использует ранее неизвестную уязвимость, отслеживаемую как CVE-2022-2588. Недостаток в связан с проблемой использования после освобождения, которая находится в route4_change при реализации фильтра net/sched/cls_route.c в ядре Linux.

Уязвимость позволяет локальному привилегированному злоумышленнику вывести систему из строя, что может привести к повышению локальных привилегий.

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

Причем специалисты описали подход, который можно применять и для Android.

Кстати, POC доступен на GitHub.
В недавних выпусках движка Chromium изменено поведение, связанное с записью в буфер обмена. Если в Firefox, Safari и старых выпусках Chrome запись в буфер обмена допускалась только после явных действий пользователя, то в новых выпусках для записи достаточно просто открыть сайт. Изменение поведения в Chrome объясняется необходимостью чтения данных из буфера обмена при выполнении теста, проверяющего работу заставки Google Doodle на странице открытия новой вкладки. Вместо специфичной обработки данной ситуации, в Chromium просто разрешили всем сайтам обращаться к буферу обмена (читать и записывать) без необходимости предварительных действий со стороны пользователя.


В Chrome внесено изменение, допускающее запись в буфер обмена без действий пользователя
https://www.opennet.ru/opennews/art.shtml?num=57684
Аналог beef, судя по всему
Forwarded from HackGit
​​XSS Exploitation Tool

A penetration testing tool that focuses on the exploit of Cross-Site Scripting vulnerabilities.

▫️ Exfiltrate input field data
▫️ Exfiltrate cookies
▫️ Keylogging
▫️ Display alert box
▫️ Redirect user

https://github.com/Sharpforce/XSS-Exploitation-Tool
Forwarded from GitHub Community
​visx – Библиотека, от компании AirBnB, с набором компонентов для визуализации, которая основывается на D3

⤷ Ссылка на проект

GitHub | #Interesting #TypeScript
Forwarded from GitHub Community
​lazydocker – интерфейс для docker и docker-compose в терминале, который разработан с использованием gocui

⤷ Ссылка на проект

GitHub | #Interesting #Go
Forwarded from HackGit
​​Awesome Password Cracking

A curated list of awesome tools, research, papers and other projects related to password cracking and password security.

https://github.com/narkopolo/awesome-password-cracking

t.me/hackgit
Forwarded from Стой под стрелой (Nikita Prokopov)
Есть такой классный сериал, Атланта. Он в целом очень милый, но иногда там такую философию выдают, что грузит похлеще Сартра. В одной серии один из персонажей выходит из кухни с кружкой, из которой ест сендвич. «Breakfast cup», — говорит. Ему: «You made that up», типа, нет такого понятия. На что он справедливо замечает: «Everything is made up, nigga. Stay woke».

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

Например, недавно в комментариях разразился срач, является ли функция, выводящая в лог, чистой. Может является, а может и не является — потому что никто не знает, что такое чистая функция. Точнее как: этот термин может означать то, что тебе нужно, и в зависимости от этого она либо будет чистой, либо не будет.

Сложно? Вот и я о том же. В конечном итоге важно то, что функция выводит в лог. А считать ее чистой или нет — абсолютно бесполезный спор, который НИЧЕГО не добавляет и НИЧЕГО не проясняет.

Является ли выделение памяти сайд эффектом? В каком-то смысле да, но обычно удобнее считать, что нет (пока память не кончится). Важно в конечном итоге то, что память выделяется, и то, какими свойствами это выделение обладает, а не то, как мы это назовем. Какая разница?

Другой спор был про то, является ли CRDT алгоритмом консенсуса. Один из оппонентов считал, что да, потому что его определение алгоритма консенсуса включало CRDT. А другой считал, что нет, потому что его определение его не включало. О чем был спор? Поменялись ли свойства CRDT от этого хоть на йоту? Нет, CRDT что делал, ровно это и продолжает делать. Спор даже не притронулся к сути вопроса.

И так в нашей области постоянно. Особенно я люблю, когда удобные термины присваивают и переназначают им смысл. Например, до недавнего времени признаком функционального языка являлась строгая статическая типизация, но сейчас это уже не так. Или Алан Кей, который придумал ООП как объекты и передачу сообщений в первую очередь, но индустрии термин понравился и они взяли его для процедурно-классового программирования. А единственный ООП-язык теперь это Эрленг и он даже не пытается таковым себя называть, потому что не поймут.

Если совсем уж ударяться в философию, то так-то и вещей в природе не существует. В природе нет конкретно собаки или там яблока, есть просто набор атомов, которые в какой-то момент оказались «рядом». Это просто нам удобно эту совокупность атомов как-то покороче обозвать, но, опять же, к происходящему на самом деле это отношения не имеет. Мир прекрасно существовал до того, как человек придумал для него слова, а парадокс корабля Тесея не существует в природе, он есть только в голове человека.

Смотрите на суть, а не на терминологию, короче. Потому что терминологию со временем меняют, а суть остается. Stay woke.
A PoC to remotely control Windows machines over Websockets.