Forwarded from Blue (h/c)at Café
💸 Как за $2 вскрыть дыру в кешбэке
В Июне одного Ибшника осенило -- "Почему бы не проверить одну бизнес-логику кешбэков и получить небольшую прибыль?" Ниже разбор уязвимости, которая в проекте "X" была скрыта за
🧠 Суть уязвимости
1. При реальном начислении кешбэка из суммы продукции amount используется
2. Каждую ночь планировщик запускает
3. Пользователь может вручную проверить буфер через вызов
Если вызвать два
Псевдокот🥺 для понимания:
😈 How to hack?
1. Подготовка тестового окружения
Регистрации фейкового пользователя и эмуляция 40 покупок по $1 при 2.5% кешбэка:
🔵 В результате
2. Параллельный Redeem
Тут можно бурпом обойтись и его параллельной отправкой запросов
3. Сбор и анализ результатов
🔵 Оба запроса вернули успешный
🔵 Баланс вырос на $0.40 вместо $0.20
4. Проверка остаточных данных
После вызова:
🔵
🔵
🖌 Исправление
Два пункта, которые назовётлюбой вайбкодер middle разработчик:
🔵 Отказ от
🔵 Блокировка доступа к буферу при
Исправляем псевдокот🥺 , чтоб понималось ещё лучше 💥
🍺 Итоги
Да, не самый классный баг, но всё ради "смари что можно сделать". На всё про всё ушло два доллара (на самом деле 229 рублей, но ради кликбейтного заголовка цены стали в долларах 😏 ) -- цена большого red bull в пятёрочке у дома (или чебупиццу), от которого и родилась идея пошатать бизнес-логику.
В Июне одного Ибшника осенило -- "Почему бы не проверить одну бизнес-логику кешбэков и получить небольшую прибыль?" Ниже разбор уязвимости, которая в проекте "X" была скрыта за
float64, асинхронным батчем и отсутствием блокировок.1. При реальном начислении кешбэка из суммы продукции amount используется
math.Floor(pct*100)/100 (с учётом возможных артефактов двоичного представления), а остаток (< 0.01) накапливается в fractionBuffer;2. Каждую ночь планировщик запускает
FlushBuffer(), где применяется math.Round(buffer*100)/100 (округление до ближайшего цента) и деньги переводятся в основной баланс;3. Пользователь может вручную проверить буфер через вызов
RedeemBuffer(), где тоже используется math.Floor и вычитание из буфера без блокировки.Если вызвать два
RedeemBuffer() параллельно на одном и том же пользователе, оба прочтут один и тот же buffer, начислят floor(buffer) и вычтут только один раз, в результате integer-часть оказывается зачисленной дважды.Опустил транзакции бд
Псевдокот
type UserAccount struct {
ID string
Balance float64 // основной баланс в долларах
fractionBuffer float64 // накопленная дробная часть
}
// начисление кешбэк при покупке
func (ua *UserAccount) ProcessPurchase(amount float64, rate float64) {
pct := amount * rate
credited := math.Floor(pct*100) / 100
ua.Balance += credited
ua.fractionBuffer += pct - credited
}
func (ua *UserAccount) RedeemBuffer() {
toCredit := math.Floor(ua.fractionBuffer*100) / 100
ua.Balance += toCredit
ua.fractionBuffer -= toCredit
}
func FlushBuffer(all []*UserAccount) {
for _, ua := range all {
toCredit := math.Round(ua.fractionBuffer*100) / 100
ua.Balance += toCredit
ua.fractionBuffer = 0
}
}
1. Подготовка тестового окружения
Регистрации фейкового пользователя и эмуляция 40 покупок по $1 при 2.5% кешбэка:
Balance = $0.80, fractionBuffer = $0.202. Параллельный Redeem
Тут можно бурпом обойтись и его параллельной отправкой запросов
3. Сбор и анализ результатов
200 OK с credited: 0.204. Проверка остаточных данных
После вызова:
Balance = 0.80 + 2×0.20 = $1.20fractionBuffer = 0.00Два пункта, которые назовёт
float64 и хранение всего в int64 центах;Без учета микросервисов и передачи данных в битах по rpc
RedeemBuffer и FlushBuffer или иные бестпрактис решенияИсправляем псевдокот
type UserAccount struct {
ID string
mu sync.Mutex
BalanceCents int64 // целые центы
fractionCents int64 // накопленные центы < 100
}
func (ua *UserAccount) ProcessPurchase(amountCents int64, ratePermille int64) {
ua.mu.Lock()
defer ua.mu.Unlock()
pct := amountCents * ratePermille / 1000
creditedDollars := pct / 100
ua.BalanceCents += creditedDollars * 100 // конвертация долларов в центы
ua.fractionCents += pct % 100 // остаток в центах
}
func (ua *UserAccount) RedeemBuffer() {
ua.mu.Lock()
defer ua.mu.Unlock()
toCredit := ua.fractionCents // начисляем все накопленные центы
ua.BalanceCents += toCredit
ua.fractionCents = 0 // обнуляем буфер
}
func FlushBuffer(all []*UserAccount) {
for _, ua := range all {
ua.mu.Lock()
ua.BalanceCents += ua.fractionCents // начисляем все накопленные центы
ua.fractionCents = 0 // обнуляем буфер
ua.mu.Unlock()
}
}
Да, не самый классный баг, но всё ради "смари что можно сделать". На всё про всё ушло два доллара
Please open Telegram to view this post
VIEW IN TELEGRAM
www.opennet.ru
Уязвимости в Git, допускающие выполнение кода при обращении к внешнему репозиторию
Опубликованы корректирующие выпуски распределённой системы управления исходными текстами Git 2.43.7, 2.44.4, 2.45.4, 2.46.4, 2.47.3, 2.48.2, 2.49.1 и 2.50.1, в которых устранены уязвимости, позволяющие выполнить свой код на системе пользователя при выполнение…
🔗Ссылка:
https://opennet.ru/63552/
https://opennet.ru/63552/
www.opennet.ru
Доступна система обнаружения атак Suricata 8.0
После двух лет разработки организация OISF (Open Information Security Foundation) опубликовала релиз системы обнаружения и предотвращения сетевых вторжений Suricata 8.0, которая предоставляет средства инспектирования различных видов трафика. В конфигурациях…
🔗Ссылка:
https://opennet.ru/63561/
https://opennet.ru/63561/
Forwarded from Adaptix Framework
Продолжаем тему AxScript, в этом посте затрону тему "Post Hook". Скрипты в расширениях теперь позволяют создавать обработчики результатов выполнения команд, которые вы регистрировали.
На первом скриншоте результаты работы обычного BOF'а hashdump, и того же самого BOF'a hashdump, для которого установлен пост хук (скрин 2).
В скрипте мы очищаем вывод от служебных сообщений, получаем параметры агента (имя машины и адрес), регуляркой парсим пользователей и хеши, после чего сохраняем их в менеджер учетных данных (скрин 3).
На первом скриншоте результаты работы обычного BOF'а hashdump, и того же самого BOF'a hashdump, для которого установлен пост хук (скрин 2).
В скрипте мы очищаем вывод от служебных сообщений, получаем параметры агента (имя машины и адрес), регуляркой парсим пользователей и хеши, после чего сохраняем их в менеджер учетных данных (скрин 3).
Forwarded from Похек
CVE-2025-3248: новую уязмостью в Langflow активно эксплуатируют
#разбор_CVE #CVE #RCE #AI #ML #LLM #python
Langflow — популярный Python-фреймворк для создания AI-приложений, который используют разработчики по всему миру. Но есть нюанс — критическая уязвимость с CVSS 9.8, которую уже активно эксплуатируют для развертывания ботнета Flodrix.
➡️ Технические детали
➡️ Тип уязвимости: Неаутентифицированное удаленное выполнение кода (RCE)
➡️ Затронутые версии: Langflow до версии 1.3.0
➡️ Вектор атаки: POST-запросы к эндпоинту
➡️ Механизм: Недостаточная валидация входных данных при компиляции Python-кода
➡️ Процесс эксплуатации
1. Сбор IP-адресов публично доступных серверов Langflow через Shodan/FOFA
2. Использование публичного PoC для получения удаленного доступа
3. Выполнение разведывательных команд (
4. Загрузка и установка ботнета Flodrix
5. Установка связи с C&C сервером для координации DDoS-атак
➡️ Последствия
➡️ Полная компрометация системы
➡️ Участие в DDoS-атаках
➡️ Потенциальная утечка чувствительных данных и конфигураций
➡️ Что делать
Если используете Langflow — немедленно обновляйтесь до версии 1.3.0 или выше. Проверьте логи на предмет подозрительных POST-запросов к
Ботнет Flodrix уже показал себя как серьезная угроза, так что не тяните с патчингом. Особенно если ваши AI-приложения доступны из интернета.
🛸 🛸 exploit.py
🔗 Подробности
🌚 @poxek | 🌚 Блог | 📺 YT | 📺 RT | 📺 VK
#разбор_CVE #CVE #RCE #AI #ML #LLM #python
Langflow — популярный Python-фреймворк для создания AI-приложений, который используют разработчики по всему миру. Но есть нюанс — критическая уязвимость с CVSS 9.8, которую уже активно эксплуатируют для развертывания ботнета Flodrix.
/api/v1/validate/code1. Сбор IP-адресов публично доступных серверов Langflow через Shodan/FOFA
2. Использование публичного PoC для получения удаленного доступа
3. Выполнение разведывательных команд (
whoami, printenv, cat /root/.bash_history)4. Загрузка и установка ботнета Flodrix
5. Установка связи с C&C сервером для координации DDoS-атак
Если используете Langflow — немедленно обновляйтесь до версии 1.3.0 или выше. Проверьте логи на предмет подозрительных POST-запросов к
/api/v1/validate/code. И да, если ваш сервер был скомпрометирован — полная переустановка системы, никаких полумер.Ботнет Flodrix уже показал себя как серьезная угроза, так что не тяните с патчингом. Особенно если ваши AI-приложения доступны из интернета.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Еще одна AD лаба от авторов NetExec с доступными райтапами, подойдет новичкам для изучения основных техник, неплохая история для тех, кто хочет вкатиться в изучение AD
Главная цель - стать доменным администратором
После окончания установки перезагрузить все машины, дабы выкинуть из памяти (lsass) лишние пароли
Originally featured in the LeHack2024 Workshop, this lab is now available for free to everyone! In this lab, you’ll explore how to use the powerful tool NetExec to efficiently compromise an Active Directory domain during an internal pentest
#windows #lab #ad
Please open Telegram to view this post
VIEW IN TELEGRAM