Как известно Site в контексте браузера это схема и TLD+1 (см. подробнее здесь). Представим, что мы зарегистрированы на ресурсе
"Public Suffix List" – список доменных окончаний (например,
В прошлом браузеры использовали алгоритм, который запрещал установку wide-ranging Cookie (или Super Cookie) только для доменов верхнего уровня (TLD) без точек (например,
Чтобы предотвратить подобные проблемы, браузеры используют Public Suffix List. Этот список помогает ограничить установку Cookie на такие общие домены, тем самым предотвращая установку «Super Cookie». А определение Site в контексте браузера корректнее интерпретировать как URL схема и eTLD+1.
Подробнее: https://publicsuffix.org/learn/same-site
tsu.edu.ru
, и браузер хранит Cookie для данного хоста. Как поведет себя браузер, если мы посетим ресурс tusur.edu.ru
? Отправит ли он Cookie одного ресурса на другой, если выполняется условие TLD+1?"Public Suffix List" – список доменных окончаний (например,
.com
, .co.uk
), под которыми конечные пользователи могут напрямую регистрировать свои доменные имена. Так же этот список еще называют eTLD (effective top-level domain).В прошлом браузеры использовали алгоритм, который запрещал установку wide-ranging Cookie (или Super Cookie) только для доменов верхнего уровня (TLD) без точек (например,
com
или org).
Однако это не работало для доменов верхнего уровня, в которых разрешена регистрация только третьего уровня (например, co.uk).
В таких случаях сайты могли установить Cookie для домена .co.uk
, который передавался каждому сайту, зарегистрированному в домене co.uk
.Чтобы предотвратить подобные проблемы, браузеры используют Public Suffix List. Этот список помогает ограничить установку Cookie на такие общие домены, тем самым предотвращая установку «Super Cookie». А определение Site в контексте браузера корректнее интерпретировать как URL схема и eTLD+1.
Подробнее: https://publicsuffix.org/learn/same-site
🔥8
На meetup’е от koronatech узнал про интересную особенностью Postman — хранение данных, которые через него проходят, на серверах Postman’а в США. Отказ от подобного сбора данных ведет к «окерпичиванию» продукта. Особый интерес к этой особенности стоит обратить внимание компаниям, чьи разрабы/тестировщики активно используют Postman для работы с API.
В качестве альтернативы предложили рассмотреть https://hoppscotch.io/.
AppSec’и koronatech так же приложили руку к развитию данного продукта, закрывая свои потребности и проблемы при его использовании, отправляя MR’ы разработчикам hoppscotch.
В качестве альтернативы предложили рассмотреть https://hoppscotch.io/.
AppSec’и koronatech так же приложили руку к развитию данного продукта, закрывая свои потребности и проблемы при его использовании, отправляя MR’ы разработчикам hoppscotch.
🌚4👍3🔥2
Продолжаем узнавать Cookie чуть больше. Сегодня поговорим о «чипсах» в печеньках 🍪
Partitioned Cookies (CHIPS) — это специальные куки, которые работают только в рамках top-level site, даже если они установлены сторонним сервисом.
Cookies с пометкой Partitioned имеют двойной ключ: по источнику (origin), который их устанавливает , и по источнику top-level page.
Как это работает?
1. Обычные сторонние куки:
Допустим, сайт А и сайт Б используют один и тот же сервис аналитики (например, analytics.com). Без Partitioned Cookies сервис analytics.com может записать куки в браузер пользователя на сайте А, а потом использовать тот же куки на сайте Б. Это позволяет отслеживать, какие ресурсы вы посетили.
2. С Partitioned Cookies:
Куки от analytics.com будут привязаны к сайту А. Если пользователь перейдет на сайт Б, который тоже использует analytics.com, браузер создаст новый куки для сайта Б. Таким образом, аналитический сервис не сможет связать ваши действия на разных сайтах.
Примеры использования.
- Сохранение некоторой приватности. Сайты и рекламные сети больше не смогут собирать данные о вашем поведении на разных ресурсах через общие куки.
- Если вы зашли на сайт интернет-магазина и там работает встроенный чат от chat-service.com, этот сервис установит Partitioned Cookie. Позже, если вы откроете другой сайт с тем же чатом, chat-service.com не получит доступ к куки с интернет-магазина — чат начнется «с нуля»
Partitioned Cookies (CHIPS) — это специальные куки, которые работают только в рамках top-level site, даже если они установлены сторонним сервисом.
«Top-level site» (верхнеуровневый сайт) — это сайт, который вы видите в адресной строке браузера. Например, если вы открыли сайт shop.com, а на нём есть встроенная карта от maps-service.com или чат от chat-widget.com, то shop.com и будет top-level site.
Если вы открыли сайт news.com, то news.com — это top-level site (сайт верхнего уровня), а конкретная страница, например news.com/sports — это top-level page (страница верхнего уровня).
Cookies с пометкой Partitioned имеют двойной ключ: по источнику (origin), который их устанавливает , и по источнику top-level page.
Как это работает?
1. Обычные сторонние куки:
Допустим, сайт А и сайт Б используют один и тот же сервис аналитики (например, analytics.com). Без Partitioned Cookies сервис analytics.com может записать куки в браузер пользователя на сайте А, а потом использовать тот же куки на сайте Б. Это позволяет отслеживать, какие ресурсы вы посетили.
2. С Partitioned Cookies:
Куки от analytics.com будут привязаны к сайту А. Если пользователь перейдет на сайт Б, который тоже использует analytics.com, браузер создаст новый куки для сайта Б. Таким образом, аналитический сервис не сможет связать ваши действия на разных сайтах.
Примеры использования.
- Сохранение некоторой приватности. Сайты и рекламные сети больше не смогут собирать данные о вашем поведении на разных ресурсах через общие куки.
- Если вы зашли на сайт интернет-магазина и там работает встроенный чат от chat-service.com, этот сервис установит Partitioned Cookie. Позже, если вы откроете другой сайт с тем же чатом, chat-service.com не получит доступ к куки с интернет-магазина — чат начнется «с нуля»
Please open Telegram to view this post
VIEW IN TELEGRAM
MDN Web Docs
Cookies Having Independent Partitioned State (CHIPS) - Privacy on the web | MDN
Cookies Having Independent Partitioned State (CHIPS, also known as Partitioned cookies) allows developers to opt a cookie into partitioned storage, with a separate cookie jar per top-level site.
🔥5
Наконец-то прошел сертификацию: Burp Suite Certified Practitioner 😈
4 часа и 2 веб-приложения, в которых по 3 этапа (в каждом):
1. Получить доступ к низкопривилегированному пользователю
2. Поднять привилегии до админа
3. Прочесть файл: /home/carlos/secret
На каждом этапе и в каждом приложении полный рандом. Одно приложение может быть в копейку как лабы PS Academy (решение идентично), а второе — габелла. А может быть, что оба приложения не сахар.
Если сформировалось «тунельное зрение» на лабах PS Academy, вас на этом могут подловить. Перед сдачей сертификации вам на это тонко намекнут.
Опыт получился интересный, не безболезненный.
Ну и прувы: https://portswigger.net/web-security/e/c/a717674510ae8b65
4 часа и 2 веб-приложения, в которых по 3 этапа (в каждом):
1. Получить доступ к низкопривилегированному пользователю
2. Поднять привилегии до админа
3. Прочесть файл: /home/carlos/secret
На каждом этапе и в каждом приложении полный рандом. Одно приложение может быть в копейку как лабы PS Academy (решение идентично), а второе — габелла. А может быть, что оба приложения не сахар.
Если сформировалось «тунельное зрение» на лабах PS Academy, вас на этом могут подловить. Перед сдачей сертификации вам на это тонко намекнут.
Опыт получился интересный, не безболезненный.
Ну и прувы: https://portswigger.net/web-security/e/c/a717674510ae8b65
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
Обновления.
В semgrep выше версии 1.100.0 решили убрать snippet’ы (участки исходного кода) в поле
Для этого нужно зарегаться на их площадке Semgrep AppSec Platform, создать токен доступа и прикрепить его себе в переменную окружения
Однако такой запрет обходится созданием переменной окружения
Например, такого Dockerfile будет вполне достаточно
Сканер вернет нам отчет с snippet’ами, как и положено
В semgrep выше версии 1.100.0 решили убрать snippet’ы (участки исходного кода) в поле
lines
из отчетов для незалогиненных пользователей. В таком случае будет возвращаться «requires login
»
"fingerprint": "requires login",
"lines": "requires login",
Для этого нужно зарегаться на их площадке Semgrep AppSec Platform, создать токен доступа и прикрепить его себе в переменную окружения
SEMGREP_APP_TOKEN
.Однако такой запрет обходится созданием переменной окружения
SEMGREP_APP_TOKEN
с произвольным значением и даже без доступа в интернет🌚.Например, такого Dockerfile будет вполне достаточно
FROM semgrep/semgrep
WORKDIR /opt
COPY . /opt/
ENV SEMGREP_APP_TOKEN="qqq"
CMD ["semgrep", "scan", "--metrics=off", "--config=/opt/rules", "--json", "/src", "--output", "/out/semgrep.json"]
Сканер вернет нам отчет с snippet’ами, как и положено
👍4🌚4
Forwarded from Arkiix's Blog
JWT blacklist bypass
Как вы все знаете, JWT самодостаточен. Именно это делает его таким удобным, но некоторые обычные вещи становятся невозможными, например завершение сессии пользователя.
Если пойти в Google с вопросом об отзыве JWT, вы наткнётесь на кучу обсуждений и предложений. Обычно подход заключается в занесении его в blacklist, который хранится, например, в Redis. В интернете много рекомендаций вроде: когда нужно отозвать токен, сохраняешь его (или его хэш) в Redis, а когда запрос с токеном прилетает на сервер — проверяешь, нет ли его там.
Во время пентеста я заметил интересную аномалию, природа которой описана в этой статье: Decoding the JWT anomaly. Если последний символ в подписи JWT заменить на смежный в алфавите, то сигнатура остаётся валидной, и сервер не замечает разницы.
Пример:
Заменив в конце токена букву s на t, получаем валидный токен. Можете проверить сигнатуру на jwt.io (ключ — “key”).
Отсюда появилась теория: если сервер ведёт blacklist JWT, сохраняя в него сам токен или его хэш, то, заменив последний символ, подпись останется валидной, но этого токена (или его хэша) не будет в blacklist.
Теорию я проверил на bug bounty, и уже во второй программе смог «возрождать» отозванные токены.
Если при разработке сервиса всё-таки необходимо отзывать JWT, то заносите в blacklist jti или другие уникальные идентификаторы токена.
Как вы все знаете, JWT самодостаточен. Именно это делает его таким удобным, но некоторые обычные вещи становятся невозможными, например завершение сессии пользователя.
Если пойти в Google с вопросом об отзыве JWT, вы наткнётесь на кучу обсуждений и предложений. Обычно подход заключается в занесении его в blacklist, который хранится, например, в Redis. В интернете много рекомендаций вроде: когда нужно отозвать токен, сохраняешь его (или его хэш) в Redis, а когда запрос с токеном прилетает на сервер — проверяешь, нет ли его там.
Во время пентеста я заметил интересную аномалию, природа которой описана в этой статье: Decoding the JWT anomaly. Если последний символ в подписи JWT заменить на смежный в алфавите, то сигнатура остаётся валидной, и сервер не замечает разницы.
Пример:
eyJhbGciOiJIUzI1NiJ9.eyIxIjoxfQ.OUTJgV9NjeWLUPzLk0QzICm280pH00Zf54IpR5C4IFs
eyJhbGciOiJIUzI1NiJ9.eyIxIjoxfQ.OUTJgV9NjeWLUPzLk0QzICm280pH00Zf54IpR5C4IFt
Заменив в конце токена букву s на t, получаем валидный токен. Можете проверить сигнатуру на jwt.io (ключ — “key”).
Отсюда появилась теория: если сервер ведёт blacklist JWT, сохраняя в него сам токен или его хэш, то, заменив последний символ, подпись останется валидной, но этого токена (или его хэша) не будет в blacklist.
Теорию я проверил на bug bounty, и уже во второй программе смог «возрождать» отозванные токены.
Если при разработке сервиса всё-таки необходимо отзывать JWT, то заносите в blacklist jti или другие уникальные идентификаторы токена.
👍7❤2🔥2🌚1
Сегодня решил покапать Bug Bounty и снова столкнулся с тестированием bitrix и словил пару флешбеков.
На тему безопасности bitrix был уже не один доклад.
Если вкратце, то вот хороший материал №1 и хороший материал №2 на эту тему.
Есть даже сканер, который позволяет автоматизированно проводить типовые проверки потенциальных sink’ов. За основу взят, наверное, самый популярный доклад по уязвимостям битрикс.
Так же обнаружил еще один способ обхода ограничений на
В моем случае загружает страницу входа, но без стилей и popup’ов. Это не мешает воспользоваться функционал данной страницы.
Так же вот доп ресурсы, которые я бы добавил:
- Worldlist ручек битрикса.
- Слитый код демо версии bitirx. Можно подглядывать при blackbox тестировании +еще (да, здесь был открытый код core части команды битрикса)
- Документация для разработчиков
- Официально опубликованные найденные уязвимости bitrix, некоторые содержат PoC
- Сплойты для CVE, есть и для bitrix
На тему безопасности bitrix был уже не один доклад.
Если вкратце, то вот хороший материал №1 и хороший материал №2 на эту тему.
Есть даже сканер, который позволяет автоматизированно проводить типовые проверки потенциальных sink’ов. За основу взят, наверное, самый популярный доклад по уязвимостям битрикс.
Так же обнаружил еще один способ обхода ограничений на
/bitrix/admin
(помимо тех, что были в докладах):
/bitrix/components/bitrix/desktop/admin_settings.php?lang=ru&bxpublic=Y
В моем случае загружает страницу входа, но без стилей и popup’ов. Это не мешает воспользоваться функционал данной страницы.
Так же вот доп ресурсы, которые я бы добавил:
- Worldlist ручек битрикса.
- Слитый код демо версии bitirx. Можно подглядывать при blackbox тестировании +
- Документация для разработчиков
- Официально опубликованные найденные уязвимости bitrix, некоторые содержат PoC
- Сплойты для CVE, есть и для bitrix
Telegram
README.hta
Дано: предположительная компрометация сервера на CMS 1C:Битрикс.
⢉⣠⠃ ⠒⠥⠕⣁⢘⢄⠱⠸ ⢒⠓⠆⠥⡈ ⠰⢠⡡ ⢢⡉⡊⠩⠃⢤⡄⢔⢁⠬⠓⠙⢐ ⢔⠙⠓ ⢉⢈⢊⡑⠸⣀ ⡡⢡⡢⡂⠇⣁⠍⠡⠔⡠⡄⡄ ⡈⡈⡃⠙⠌⢑⣁⢰⡠ ⡤⡠⠢⠔ ⠉⠙⠎⠨⠥⡢ ⢔⠇⢢⠊⠨⢈⠖ ⢃⠕⠢⣈⠑⠋⡒⡑ ⡠⡤⠦⡑⠡⡤⠍⠍⠇⣂⢡⢃⢠⠉⡈⠩⢢⠉⠓⣁⡔⠤⢑⢤⠅⠚ ⢘⠒⢆⠬⡰⠩⡤ ⡈⡉⢠⠖⣐⠤⡰⠕⠆⣐⡢⠲ ⡔⡘⠙⡁⠌ ⢒⣀⡄⠢⡐⡐⠸⠸⢠⢌⠒⠱⢐ ⢄ ⡰⢨⠌ ⠨⠍⡄⠎⢃⡢ ⠋⣂⡠⠪⡊⠤⡘⠨⣐⠅⢒…
⢉⣠⠃ ⠒⠥⠕⣁⢘⢄⠱⠸ ⢒⠓⠆⠥⡈ ⠰⢠⡡ ⢢⡉⡊⠩⠃⢤⡄⢔⢁⠬⠓⠙⢐ ⢔⠙⠓ ⢉⢈⢊⡑⠸⣀ ⡡⢡⡢⡂⠇⣁⠍⠡⠔⡠⡄⡄ ⡈⡈⡃⠙⠌⢑⣁⢰⡠ ⡤⡠⠢⠔ ⠉⠙⠎⠨⠥⡢ ⢔⠇⢢⠊⠨⢈⠖ ⢃⠕⠢⣈⠑⠋⡒⡑ ⡠⡤⠦⡑⠡⡤⠍⠍⠇⣂⢡⢃⢠⠉⡈⠩⢢⠉⠓⣁⡔⠤⢑⢤⠅⠚ ⢘⠒⢆⠬⡰⠩⡤ ⡈⡉⢠⠖⣐⠤⡰⠕⠆⣐⡢⠲ ⡔⡘⠙⡁⠌ ⢒⣀⡄⠢⡐⡐⠸⠸⢠⢌⠒⠱⢐ ⢄ ⡰⢨⠌ ⠨⠍⡄⠎⢃⡢ ⠋⣂⡠⠪⡊⠤⡘⠨⣐⠅⢒…
🔥8
Случайно наткнулся на интересный ресурс — Сделай свой X.
Это GitHub репозиторий, в котором собраны практики по низкоуровневому программированию. Из примеров: Сделай свой
- блокчейн
- браузер
- эмулятор
- ОС
Будет не лишним для обучения или портфолио
Это GitHub репозиторий, в котором собраны практики по низкоуровневому программированию. Из примеров: Сделай свой
- блокчейн
- браузер
- эмулятор
- ОС
Будет не лишним для обучения или портфолио
GitHub
GitHub - codecrafters-io/build-your-own-x: Master programming by recreating your favorite technologies from scratch.
Master programming by recreating your favorite technologies from scratch. - codecrafters-io/build-your-own-x
👍6
Я решил, что в рунете мало статей по SOP и CORS, поэтому решил добавить еще одну, попутно расписав другие cross-origin политики безопасности браузера.
Хабр
CORS, CORP, COEP, COOP. Разбираемся со всеми CO* и смотрим на нюансы
В сети интернет достаточно информации на русском языке по поводу SOP и CORS, но введение в такие технологии как CORP, COEP и COOP показалось недостаточным (а кто-то может видеть эти аббревиатуры...
🔥10👍1
Недавно проходил VolgaCTF, в котором я принимал участие в составе команды SiBears 🐻
Попался достаточно интересный таск на SQL-инъекцию, который удалось успешно решить. Решил поделиться размышлениями и ходом действий в решении таска.
🔍 Writeup-SQL-injection-task-VolgaCTF-2025
Попался достаточно интересный таск на SQL-инъекцию, который удалось успешно решить. Решил поделиться размышлениями и ходом действий в решении таска.
🔍 Writeup-SQL-injection-task-VolgaCTF-2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤1
Forwarded from Whitehat Lab
Windows, *nix машины для самостоятельного пентеста. Во free тарифе всегда доступно 20 машин. Обучение, академия, лабы и т.д. Есть огромное количество CTF заданий в различных категориях.
Возможность сдать экзамены и получить сертификаты CBBH (Certified Bug Bounty Hunter), CPTS (Certified Penetration Testing Specialist), CWEE (Certified Web Exploitation Expert) и CDSA (Certified Defensive Security Analyst)🙃
Аналог HackTheBox без CTF заданий. Академия в наличии, также присутствует free тариф😁
Академия веб пентеста от создателей BurpSuite. Для сдачи экзамена необходима активная подписка на Burp Suite Professional, цена экзамена 99$😈
Информацию почти обо всех прошедших и предстоящих CTF соревнованиях можно найти здесь
Русскоязычная площадка😎 . Большое (300+) количество CTF задач в самых различных категориях (web, crypto, rev, pwn, osint и т.д.), в наличии Windows и Linux машины. Есть бесплатный тариф
Один из лучших ресурсов с задачами по криптографии. Нравится криптография ? Вам сюда, от азов до сложнейших задач
Киберполигон от компании😎 Positive Technologies. Это виртуальная инфраструктура с реалистичными копиями IT-систем из разных отраслей. Достаточно высокий порог вхождения. Ежегодно проводятся турниры, куда вы можете отобраться со своей командой
Русскоязычная площадка от ребят из команды TaipanByte, большое кол-во тасков (80+) во всех основных категориях
Образовательная платформа, позволяющая изучать и практиковать основные концепции кибербезопасности. Рассчитана на новичков
Appsec тренировки, LLM, owasp top10, owasp api top10, aws top10 и т.д.
Путешествие в мир Linux, основные команды, лабы, руководства
Игра из 34 уровней для изучения Linux
Большое количество (~4000) крякми для изучения. Подойдет реверсерам
Для любителей бинарной эксплуатации (PWN)
Русскоязычная площадка. One task of the month - выкладывают по 1ой CTF задаче в месяц, в этом году планируют 10 заданий в категориях: web, pwn, crypto, reverse, misc и т.д.
Огромное (500+) кол-во заданий в самых разных категориях
Площадка с CTF заданиями начального уровня, почти на все задания можно найти райтапы
ВМ Phoenix для изучения уязвимостей, разработки эксплойтов, отладки программного обеспечения и общих проблем кибербезопасности
Темы - Network programming, Stack overflows, Format string vulnerabilities, Heap overflows
Парольные загадки (ребусы), например, пароль это сумма чисел от 1 до 446, соответственно надо написать простенькую автоматизацию и ввести в поле ввода
Простенький хакер квест состоящий из 20 уровней
#htb #crackmes #bandit #hacking #ctf #ethical
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3
Представим ситуацию, у нас реализуется web-приложение с stateless сессиями — с использованием accessToken. Пользователь проходит аутентификацию, и backend-сервер выпускает accessToken и передает его клиенту.
Классический вопрос: «Где хранить accessToken на клиенте?».
Если JS-коду не нужно взаимодействовать с токеном, то единственным безопасным вариантом является хранение токена в Cookie с атрибутами HttpOnly, SameSite, Secure. Однако, как быть, если такая необходимость есть? Хранить токен в localStorage?
😏 Чем плохо такое решение? Если хранить accessToken в localStorage, то при XSS у злоумышленника будет доступ к хранилищу браузера, и токен может быть украден.
На практике мне встречалась реализация, где разработчикии рыбку съели и токен хранили в Cookie, и подставляли его в HTTP Header через JS.
Как? Всё просто — они реализовали API, который возвращает в теле ответа все Cookie, которые передавались в HTTP запросе. JS-код брал токен из ответа и подставлял в HTTP заголовок Bearer для следующего запроса. По сути это обход защиты атрибута HttpOnly.
😏 Чем плох этот вариант? Помимо XSS, при небезопасной конфигурации CORS, злоумышленник сможет получить токен жертвы из ответа сервера, заманив ее на подконтрольный ресурс.
Существует еще одно решение — хранить токен в переменной JS и обернуть его в замыкание. Однако у злоумышленника останется возможность влиять на контекст выполнения. Поэтому, более безопасный метод - предотвратить вмешательство с помощью XSS в среду выполнения, которая имеет токен, достигая изоляции контекста. В веб-фронтенде это можно сделать с помощью Web Workers.
Идея заключается в том, чтобы поместить все запросы API в рабочий поток. Благодаря изоляции среды выполнения, если в рабочем потоке нет XSS, основной поток не может вмешаться в рабочего и не может получить доступ к его данным. Это обеспечивает безопасность токена.
Web Worker делится на три вида:
• Dedicated workers: используется только одним скриптом
• Shared workers: может использоваться несколькими скриптами в разных окнах/фреймах.
• Service Workers: выполняет роль прокси-сервера для взаимодействия между веб-приложением, браузером и сетью.
🔍 В этой статье описывается пример использование Dedicated Worker и обоснование отказа от Service Worker.
🔍 В этой статье, напротив, используется Service Worker + описываются другие примеры использования «прослойки» между фронтом и беком. Например, в кейсе, который я описывал выше (с API, которая возвращает Cookie в ответе), можно было бы использовать прокси на бэке, отказавшись вовсе от работы JS-кода с токеном в браузере пользователя.
Классический вопрос: «Где хранить accessToken на клиенте?».
Если JS-коду не нужно взаимодействовать с токеном, то единственным безопасным вариантом является хранение токена в Cookie с атрибутами HttpOnly, SameSite, Secure. Однако, как быть, если такая необходимость есть? Хранить токен в localStorage?
На практике мне встречалась реализация, где разработчики
Как? Всё просто — они реализовали API, который возвращает в теле ответа все Cookie, которые передавались в HTTP запросе. JS-код брал токен из ответа и подставлял в HTTP заголовок Bearer для следующего запроса. По сути это обход защиты атрибута HttpOnly.
Существует еще одно решение — хранить токен в переменной JS и обернуть его в замыкание. Однако у злоумышленника останется возможность влиять на контекст выполнения. Поэтому, более безопасный метод - предотвратить вмешательство с помощью XSS в среду выполнения, которая имеет токен, достигая изоляции контекста. В веб-фронтенде это можно сделать с помощью Web Workers.
Web Workers это механизм, который позволяет скрипту выполняться в фоновом потоке, который отделен от основного потока веб-приложения.
Идея заключается в том, чтобы поместить все запросы API в рабочий поток. Благодаря изоляции среды выполнения, если в рабочем потоке нет XSS, основной поток не может вмешаться в рабочего и не может получить доступ к его данным. Это обеспечивает безопасность токена.
Web Worker делится на три вида:
• Dedicated workers: используется только одним скриптом
• Shared workers: может использоваться несколькими скриптами в разных окнах/фреймах.
• Service Workers: выполняет роль прокси-сервера для взаимодействия между веб-приложением, браузером и сетью.
🔍 В этой статье описывается пример использование Dedicated Worker и обоснование отказа от Service Worker.
🔍 В этой статье, напротив, используется Service Worker + описываются другие примеры использования «прослойки» между фронтом и беком. Например, в кейсе, который я описывал выше (с API, которая возвращает Cookie в ответе), можно было бы использовать прокси на бэке, отказавшись вовсе от работы JS-кода с токеном в браузере пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
MDN Web Docs
DedicatedWorkerGlobalScope - Web APIs | MDN
The DedicatedWorkerGlobalScope object (the Worker global scope) is accessible through the self keyword. Some additional global functions, namespaces objects, and constructors, not typically associated with the worker global scope, but available on it, are…
👍6❤4🔥3
Что будет, если скрестить XSS и CSRF? Получится XSSI.
👁 Cross Site Script Inclusion (XSSI) — это техника атаки (или уязвимость), позволяющая злоумышленникам похищать данные определенного типа через origin boundaries (дословно «границы сайта»), путем включения целевых данных с помощью тега SCRIPT в веб-страницу злоумышленника, как показано ниже:
Браузеры исполняют все скрипты, загруженные через тег <script>, в едином глобальном контексте страницы. Это означает, что когда внешний скрипт загружается через <script src="...">, его код выполняется как часть основной страницы, и все объявленные в нём переменные, функции и данные становятся доступны для другого JavaScript-кода на этой странице.
Один из примеров, который мне понравился:
HTTP ответ при посещении URL
Зловредный код на подконтрольном злоумышленнике ресурсе:
В итоге, когда браузер попробует отрендерить CSV как JS-код, это приведет к раскрытию данных злоумышленнику (см. вложенную картинку).
Ресурсы для самостоятельного изучения:
- https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/11-Client_Side_Testing/13-Testing_for_Cross_Site_Script_Inclusion
- https://www.mbsd.jp/Whitepaper/xssi.pdf
- https://www.scip.ch/en/?labs.20160414
<SCRIPT src="https://target.example.jp/secret"></SCRIPT>
Браузеры исполняют все скрипты, загруженные через тег <script>, в едином глобальном контексте страницы. Это означает, что когда внешний скрипт загружается через <script src="...">, его код выполняется как часть основной страницы, и все объявленные в нём переменные, функции и данные становятся доступны для другого JavaScript-кода на этой странице.
Один из примеров, который мне понравился:
HTTP ответ при посещении URL
https://victim.com/service/csvendpoint
:
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Disposition: attachment; filename="a.csv"
Content-Length: 13
1,abc,def,ghi
Зловредный код на подконтрольном злоумышленнике ресурсе:
<!--error handler -->
<script>window.onerror = function(err) {alert(err)}</script>
<!--load target CSV -->
<script src="https://victim.com/service/csvendpoint"></script>
В итоге, когда браузер попробует отрендерить CSV как JS-код, это приведет к раскрытию данных злоумышленнику (см. вложенную картинку).
Ресурсы для самостоятельного изучения:
- https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/11-Client_Side_Testing/13-Testing_for_Cross_Site_Script_Inclusion
- https://www.mbsd.jp/Whitepaper/xssi.pdf
- https://www.scip.ch/en/?labs.20160414
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Недавно зарепортил интересный недостаток, который достаточно высоко оценили с уровнем критичности high, но повысить impact получилось благодаря объединению двух low/medium недостатков.
На некотором ресурсе X есть возможность оставлять комментарий в формате Markdown с некоторыми html-тегами. «Опасные» теги, такие как
1. Тег
2. Тег
Но была возможность изменять глобальные стили страницы с использование dangling markup, который позволял выходить за контекст стилей комментария.
Например, данный код сделал текст комментария красным, а текст родительской страницы синим
Использование этих двух тегов позволило оставлять в комментах форму логина, которая выглядела идентично той, что используется в системе, но при этом скрывать весь остальный контент на странице через стили. Получается такая фишинговая страница прямо на странице целевого сайта. Данный недостаток уже оценился в high и вырос в цене.
На некотором ресурсе X есть возможность оставлять комментарий в формате Markdown с некоторыми html-тегами. «Опасные» теги, такие как
<script>
, <iframe>
, <img>
фильтруются. Однако была возможность использовать другие интересные теги. 1. Тег
<form>
. Первая мысль - создание поддельной формы логина. Уже неплохо, но выглядит немного странным наличие такой формы в комментах. Можно оценить в low/medium.2. Тег
<style>
. Наводит на мысли о CSS injection. Если вы читали данный пост, то видели о возможности кражи данных HTML-страницы, например пользовательский ввод или csrf-токен. В моем случае не было ничего критичного. Но была возможность изменять глобальные стили страницы с использование dangling markup, который позволял выходить за контекст стилей комментария.
Например, данный код сделал текст комментария красным, а текст родительской страницы синим
<div style="color:red">LOL
<style>
* {
color: blue;
}
</style>
Использование этих двух тегов позволило оставлять в комментах форму логина, которая выглядела идентично той, что используется в системе, но при этом скрывать весь остальный контент на странице через стили. Получается такая фишинговая страница прямо на странице целевого сайта. Данный недостаток уже оценился в high и вырос в цене.
👍8🔥7❤1
Forwarded from SHADOW:Group
Год назад эту защиту нельзя было обойти, однако сейчас это стало реально. Про интересную особенность рассказали в X.
Дело в том, что раньше нельзя было использовать точку в протоколе, но теперь браузер Chromium ее поддерживает (
Соответственно, мы можем использовать пэйлоад типа
#web #bypass
Дело в том, что раньше нельзя было использовать точку в протоколе, но теперь браузер Chromium ее поддерживает (
URL
вернет действительное имя хоста с любым недействительным протоколом, даже с точкой) Соответственно, мы можем использовать пэйлоад типа
evil.com://www.example.com
. Хост www.example.com
будет в списке разрешенных, к параметру добавится префикс «https://
» и мы получим редирект на https://evil.com//www.example.com
. #web #bypass
👍6
Задумывались о сомах?
Same Origin Method Execution (SOME) — это класс уязвимостей веб-приложений, при которых злоумышленник через параметр обратного вызова (callback) вынуждает браузер жертвы выполнить произвольный JavaScript-метод в контексте доверенного домена.
Звучит знакомо? Да, очень похоже на эксплуатацию классического JSONP callback, когда злоумышленник передаёт в параметре callback произвольный JavaScript-код (например, `alert(document.cookie)`), который сервер возвращает и браузер выполняет в контексте страницы. Однако, что делать, когда некоторые веб-сайты ограничивают параметр обратного вызова JSONP? Например, разрешены только определенные символы, такие как a-zA-Z.
Существует еще одно понятие, называемое Same Origin Method Execution (иногда еще называют Universal Reverse ClickJacking). Идея заключается в том, что, хотя мы можем вызывать только функции, мы также можем исполнять методы на веб-сайте с тем же происхождением. Допустим, на странице есть кнопка, при нажатии на которую происходит какое-то действие. Вы можете использовать JavaScript код, чтобы щелкнуть ее:
Поскольку символы в этом коде разрешены, вы можете поместить его внутри JSONP:
И использовать JSONP для выполнения кода, как упоминалось ранее. Похожее на XSS, но с более узкими ограничениями: злоумышленник не может внедрить произвольный код, но может взаимодействовать с DOM (кликать кнопки, отправлять формы, вызывать существующие JS-функции).
Данная уязвимость использовалась для обхода CSP и установки вредоносного плагина в WordPress: https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/
Расширение BurpSuite для обнаружения: https://github.com/PortSwigger/same-origin-method-execution
Same Origin Method Execution (SOME) — это класс уязвимостей веб-приложений, при которых злоумышленник через параметр обратного вызова (callback) вынуждает браузер жертвы выполнить произвольный JavaScript-метод в контексте доверенного домена.
Звучит знакомо? Да, очень похоже на эксплуатацию классического JSONP callback, когда злоумышленник передаёт в параметре callback произвольный JavaScript-код (например, `alert(document.cookie)`), который сервер возвращает и браузер выполняет в контексте страницы. Однако, что делать, когда некоторые веб-сайты ограничивают параметр обратного вызова JSONP? Например, разрешены только определенные символы, такие как a-zA-Z.
Существует еще одно понятие, называемое Same Origin Method Execution (иногда еще называют Universal Reverse ClickJacking). Идея заключается в том, что, хотя мы можем вызывать только функции, мы также можем исполнять методы на веб-сайте с тем же происхождением. Допустим, на странице есть кнопка, при нажатии на которую происходит какое-то действие. Вы можете использовать JavaScript код, чтобы щелкнуть ее:
document.body.firstElementChild.nextElementSibling.click
Поскольку символы в этом коде разрешены, вы можете поместить его внутри JSONP:
?callback=document.body.firstElementChild.nextElementSibling.click
И использовать JSONP для выполнения кода, как упоминалось ранее. Похожее на XSS, но с более узкими ограничениями: злоумышленник не может внедрить произвольный код, но может взаимодействовать с DOM (кликать кнопки, отправлять формы, вызывать существующие JS-функции).
Данная уязвимость использовалась для обхода CSP и установки вредоносного плагина в WordPress: https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/
Расширение BurpSuite для обнаружения: https://github.com/PortSwigger/same-origin-method-execution
👍7
Forwarded from Пакет Мероприятий | Кибербезопасность
Что – ZeroNights
Где – Санкт-Петербург, LOFT HALL #7
Когда – 26 ноября
⛓ Ссылка – zeronights.ru
📝 Думаю, что про эту конференцию и так все знают. На такое мы ходим.
🗓 Твой Пакет Мероприятий | 🗓 Наш календарь
🛍 Другие каналы
Где – Санкт-Петербург, LOFT HALL #7
Когда – 26 ноября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4