✨
AppSec & Pentest
AppSec
AppSec
  • AppSec Book
  • Intro
  • PII: Персональные данные
  • Поисковые движки
  • Построение модели угроз / анализ угроз
  • Платформы оркестрации, автоматизации пентеста
  • Audit and Compliance
  • Methodologies
    • Security Check Lists
    • Security Cheat Sheets
    • MNA Process
    • DD Process
    • Написание политик
    • Какие-то модные прикладные инструменты
    • Pentest
      • BlackBox vs GreyBox vs WhiteBox
      • Threat Modeling
      • MITRE ATT&CK
      • OSSTMM
      • CVSS
      • CIS Standarts
      • WASC
      • OWASP Testing Guides
      • PCI DSS
      • PTES
      • NIST SP 800-115
      • ISSAF
  • peoples & blogs
    • Intro
    • Companies
    • Mobile
    • People & Gitbooks
    • Podcasts
    • Jobs
  • Базы уязвимостей
    • vulners
    • zero.today
    • Регистрация CVE
  • Pentest IDE
    • Nuclei (Go)
    • jaeles (Go)
    • Pentest Collaboration Framework
    • Lair Framework (Go)
    • Faraday IDE
    • Nucleus
    • Bulwark
    • Написание отчетов
  • Payloads & Wordlists
    • Генерация wordlists
    • Payloads
      • Подборка
      • Directories
      • Passwords
      • Поддомены
      • Пароли по умолчанию
      • usernames & logins
      • Headers
      • RCE
      • XXE
      • XXS
      • JWT Secrets
    • Расширения файлов, которые можно искать
    • Bypass Something
      • bypass dot
      • 40x bypass
  • AppSec / WEB
    • Common
      • Типовая последовательность действий
      • Common Go Tools
      • Guidelines
    • Automated WebApp Pentest
      • Other tools
      • Burp Suite
        • Режимы в Intruder
        • Как заводить крякнутый
        • Plugins
        • Инструменты для Burp
        • Написание расширений
          • Documentation & Examples
          • UI
          • kotlin
            • Basic
            • Examples
          • jpython
            • Пример
        • Papers
        • Tips
    • Server-Side Vulnerabilities
      • Broken Access Control
      • Bruteforce [credentials]
        • About
        • Papers & Books
        • Tools
          • Hydra
          • Medusa
          • Potator
      • Business Logic Vuln
      • CSV-injection
      • DOS
      • DDOS
      • Dependency Confusion Attack
      • Deserialization
        • About
        • JSON
        • Java
        • .Net / ViewState
        • PHP
        • Python
        • Ruby
        • Тестовые стенды
      • Host Header Injection
      • HTTP Smuggling
      • IDOR
      • JSON Hijacking
      • LFI
      • LFR
      • Open Redirect
        • Cases
          • Open Redirect To XSS
        • CheetSheets
      • OS Command Injection
      • Path Traversal
      • Phishing
      • Race Condition
      • Regular Expression
      • Reverse Shell
      • Searching
      • Session Fixation
      • SQLi
        • Description
        • Databases
          • HQL inj
          • DQL inj
          • postgres
          • Yandex ClickHouse
        • Exec Code
        • Tools
          • Как отработает запрос в разных базах
          • sqli exploit
        • Papers
          • SQLi in Node.js
          • Cheat Sheets
      • SSRF
        • Description
        • Tools
        • Papers
      • SSTI/CSTI
      • Subdomain Takeover
        • Description
        • Tools
        • Papers
      • Upload File
        • MIME type bypass & filter evasions
        • Example: Upload File
        • Some Attacks
        • ImageMagick
        • Inject Payloads
          • To Image
          • WebShell
          • In office macros
          • Контейнеры
            • png
          • XXE/XXS -> Office
        • Tools & MindMaps
      • XML/SOAP injection/XXE
        • About
        • Tools
        • Examples XXE
        • Papers
      • Web Cache Deception
      • Web Cache Poising
    • Client-Side Vulnerabilities
      • Vulnerabilities
      • CSRF
      • CRLF
      • XSS
        • Description
        • Attacks
          • Exploiting XSS
          • GTM (and other TMS) XSS
          • Через SVG
          • DOM-based vulnerabilities
            • About
            • DOM-based XSS
            • DOM-based open redirect
            • DOM Clobbering
          • Local File Read via HTML injection in PDF
          • RCE in DOMPDF
          • [висячая разметка] Dangling markup injection
          • String.prototype.replace
          • CSS injection
          • jQuery XSS
          • AngularJS Sandbox Escape
        • Gadgets
        • Tools
        • Cheat Sheets
        • Papers
      • Prototype Pollution Attack
      • Client-Side & Client-Server Communications
        • window.postMessage
        • Server-Sent Event (SSE)
      • Eval-based Injections
      • Serialization
      • Incorrect work with location
      • Clickjacking (UI redressing)
    • Technics
      • OSINT
        • Tools
          • Поиск по сервисам
            • Github
            • Gitlab
            • Slack
            • Google Dorks
            • Facebook / Instagram
            • LinkedIn
          • Swiss Army Knife
            • Bellingcat's Online Investigation Toolkit
            • MS Threat Intelligence Platform
            • foca/goca
            • spiderfoot
            • Shodan
            • BinaryEdge (Shodan alternative)
            • Maltego
            • theharvester
            • PublicWWW
            • Разное / TODO
          • Поиск по логину / имени/компании
          • Get IP or Geo-location
          • Разное
            • База CommonCrawl
            • ТОП сайтов
        • Certificate Transparency
        • Papers
      • Кодировки
      • Web Application Testing with CryptoPro Sign
      • Получить IP спрятанный за CDN (Search Real IP)
    • SSDLC
    • DevSecOps
      • Materials
      • IAST
      • SAST
        • About
        • SAST List
        • Python: Bandit
        • Semgrep
          • Intro
          • Getting Started
          • Writing rules
            • Pattern syntax
            • Rule syntax
          • Rulesets
          • Papers
        • CodeQL
          • Intro
          • Docs & Papers
          • Get Started
          • Usage
          • CodeQL CLI
          • Writing CodeQL queries
            • About
            • CodeQL Packs
            • CodeQL Queries
            • QL Language
              • About
              • Predicates
              • Queries
              • Types
            • Libraries
              • Intro
              • Javascript
            • Basic types
            • Creating alert queries
            • Creating path queries
          • TODO
        • Checkmarx
      • DAST
        • About
        • NetSparker
        • Rapid7
        • Acunetix
        • OWASP ZAP
        • HP WebInspect
        • Burp Enterprise
        • Wallarm FAST
      • RASP
      • API ST
      • OSA/SCA — Open Source Scanners & Dependency Check
    • Browser PWN
    • Вопросы
      • Как хранить пароли?
      • Куки или токены?
      • Сброс пароля через email
      • Про процессы и контроли
      • Application Security Design Antipatterns
    • ЯП
      • JS
        • Search links
        • RCE on Desktop Clients (ex: win)
        • Обход валидаторов
    • Books & Papers
    • Tools
      • Crawling
      • CSP bypass
      • Web Fuzzers
        • Intro
        • Tools
          • Other tools
          • ffuf (Go)
          • wfuzz
      • Subdomain Enum
        • Combines
          • Amass
          • Monitorizer
          • Findomain
          • dnsdumpster
        • Another tools
        • Brute subdomains
        • Sources
        • Mutators
        • Techniques
      • Other tools
      • Scanners
      • Fingerprinting
      • Scrappers
      • CVEs List
  • Technologies
    • WEB
      • Аналитика & Маркетинг
        • Dark
        • Dark SEO
        • Просто список
      • RSS-каналы
        • Клиенты
        • Atom
      • CMIS
        • About
      • HTTP/WEB
        • Рекомендуемые заголовки (Headers)
        • HSTS
        • SameSite
        • Content-Security-Policy (CSP)
        • Same-Origin Policy (SOP)
        • Cross-Origin Resource Sharing (CORS)
        • Типы запросов
        • First Party Sets
        • Subresource Integrity (SRI)
        • HTTP Reverse Proxy
        • Papers & Resources
      • CMS
        • ModX
        • Joomla
        • Drupal
        • WordPress
        • Liferay
      • Админки/CRM
        • Zend Framework
        • Bitrix
        • Salesforce
      • WAF
      • GraphQL
      • Virtual Hosts
      • OAUTH/OpenID/2FA
        • Общие рекомендации для авторизации
        • 2FA
        • OAuth 2.0
          • About
          • Definitions
            • Clients
            • Tokens
            • Scopes
            • Grant Types
            • Redirect URL
            • The Resourse Server
          • Flows
            • Server Side App Authorization Flow
            • Single Page App Auhtorization Flow
            • Mobile and Native Apps Authorization Flow
            • Authorization Flow
            • Access Tokens Flow
              • Authorization Code Request
              • Password Grant
              • Client Credentials
              • Access Token Reponse
              • Access Token Lifetime
              • Refreshing Access Tokens
              • Making Authenticated Requests
            • Listing Authorizations and Revoking Access Flow
            • OAuth for Browserless and Input Constrained Devices
            • PKCE
            • Token Introspection Server Flow
          • Vulnerabilities
            • Common 1
            • Common 2
        • OpenID Connect (OIDC)
          • About
          • Vulnerabilities
          • Papers
        • IndieAuth
        • Разница между OAuth и OpenID
        • JWT
      • Servers
        • Oracle WebLogic
        • Jetty
        • JBoss (WildFly)
        • Nginx
        • Apache
          • .htaccess
          • <server-url>/server-status
          • Apache Tomcat
          • Apache Struts2
          • CVE
        • F5 BIG-IP
    • Покупка SIM-карт и номеров
    • Banks & Payments
      • Definitions
      • Kind of payments
      • 3DS
      • PCI DSS
      • Эквайринг
      • Vulnerabilities
      • Доклады
      • ATM
    • Программы лояльности
    • Digital Rights Management (DRM)
    • ELK — Elasticsearch, Logstash, Kibana
      • About
      • Elasticsearch
      • Logstash
      • Kibana
    • 1C
    • CI/CD
      • Jenkins
      • huskyCI
      • Travis CI
      • CircleCI
      • Общее
    • SCM
      • Gitlab
      • Tools
      • Vulns
    • Honeypots
    • ChatGPT
  • Learning
    • Компетенции
    • Материалы SANS & Offensive Security
    • Просто норм материалы/gitbooks по пентесту вцелом...
    • Platforms & Playground Labs
    • Бумажная ИБ
      • Информация Общая
      • Иерархия (виды) информации
  • Bug Bounty
    • Notes
    • Browser Plugins
    • Cheat Sheets
    • Платформы
    • Specific tools
  • Hardware/IoT
    • Tools
    • Training
    • Papers & Books
Powered by GitBook
On this page
  • Intro
  • Как это выглядит в действии
  • Время жизни токенов
  • Attacks
  • Set alg=none
  • Key Injection
  • Inject into kid header
  • JWT Algorithm Confusion Attack
  • Другие интересные заголовки, приводящие к атакам
  • Mitigations
  • Some Notes & Tools

Was this helpful?

  1. Technologies
  2. WEB
  3. OAUTH/OpenID/2FA

JWT

PreviousРазница между OAuth и OpenIDNextServers

Last updated 2 years ago

Was this helpful?

Непроверенная инфа: jwt нельзя отзывать, потому что на сервере они не хранятся

JWT:

Intro

Стандарт JWT крутится вокруг четырех понятий — JWK, JWS, JWE, JWT.

JWK — стандарт, описывающий ключи подписи и шифрования

JWS — стандарт, описывающий как подписывать информацию и хранить всю нужную информацию. Защищает целостность информации при передачи.

JWE — стандарт, описывающий как шифровать информацию и хранить всю нужную информацию. Защищает конфиденциальность информации при передачи.

JWT — стандарт, описывающий как кодировать и декодировать key-value данные в формат для передачи куда-либо.

Как это выглядит в действии

По сути, у нас есть пара значений key и value:

  • JWT: оберни key и value в json и перегони в строку

  • JWK: сгенерируй ключ для подписи и/или шифрования

  • JWE: зашифруй свои данные (payload)

  • JWS: подпиши свои данные (payload)

  • JWT: а еще добавь в заголовок необходимую информацию, чтобы другая сторона смогла расширфовать и/или проверить подпись твоего токена

Время жизни токенов

Access Token — от 5 минут до суток

Refresh Token — до месяца

Attacks

Set alg=none

Пробуем заменить в заголовке параметр alg на none. В этом случае токен подписывать не надо. Если сервер доверяет такому токену -> можем имперсонироваться под любую другую сессию.

Key Injection

Токен может быть подписан с использованием асимметричных алгоримов (например, rsa или ec). В этом случае, проверка токена осуществляется по public key, который может быть указан в заголовке или хранится на сервере в jwks.json параметре (а в заголовке jku ссылка на этот файл).

Мы можем попробовать подписать токен на своем ключе и добавить информацию о публичном ключе в jwk параметр в заголовок токена или указать ссылку на свой сервер, где расположили jwks.json файл.

Вообще, сервер не должен доверять чужим публичным ключам (список публичных ключей должен храниться в белом списке каком-то), но разработчики ошибаются)

Inject into kid header

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

Стандарт JWT не регламентирует, что такое kid и каким образом и где он должен хранится. Как результат, в этом месте поверхность атаки может расширится, а именно:

  • Если kid — это файл, то можно попробовать сделать path traversal. Например: ../../../../../../../dev/null и подписываем токен на null-байте на алгоритме HS256, например.

  • Если kid хранится в базе, можно попробовать сделать SQLi.

JWT Algorithm Confusion Attack

Исходные: JWT токен, поддерживает HS и RS алгоритмы подписи.

Находим публичный ключ (например, в /.well-known/jwks.json), кодируем его в нужный формат, переставляем алгоритм подписи в HS и подписываем на этом ключе как на секрете.

С какой-то долей вероятности, на стороне сервера, в качестве секрета (по заголовку) возьмется открытый ключ, а в коде на этапе проверки посмотрят на заголовок alg и проверят на этом секрете — PROFIT.

И даже если мы не знаем публичный ключ(и), имея два JWT с подписью RSA, можем восстановить публичный ключ сервера (CVE-2017-11424). Получить публичные ключи можем с помощью специально подготовленного Docker-контейнера:

docker run --rm -it portswigger/sig2n <token1> <token2>

На выходе получаем base64 закодированные сертификаты в формате X509 и PKCS1 и переподписанные на них как на секретах по алгоритму HS256 токены (если нам не надо ничего менять внутри этих токенов, то можем их сразу отправить для теста).

Другие интересные заголовки, приводящие к атакам

cty

x5c

Mitigations

Some Notes & Tools

Пример: , смотри про Injecting self-signed JWTs via the jwk parameter.

Lab of PortSwigger:

Пример:

cty (Content Type) - Sometimes used to declare a media type for the content in the JWT payload. This is usually omitted from the header, but the underlying parsing library may support it anyway. If you have found a way to bypass signature verification, you can try injecting a cty header to change the content type to text/xml or application/x-java-serialized-object, which can potentially enable new vectors for and attacks.

x5c (X.509 Certificate Chain) - Sometimes used to pass the X.509 public key certificate or certificate chain of the key used to digitally sign the JWT. This header parameter can be used to inject self-signed certificates, similar to the attacks discussed above. Due to the complexity of the X.509 format and its extensions, parsing these certificates can also introduce vulnerabilities. Details of these attacks are beyond the scope of these materials, but for more details, check out and .

См внизу:

Декодер -

Про токены, JSON Web Tokens (JWT), аутентификацию и авторизацию. Token-Based Authentication:

JSON Object Signing and Encryption (JOSE) — проект, в котором перечислены все возможные параметры JWT и операции над ними:

Библиотека для работы с JWT, JWS, JWK, ... — . Примеры использования можно в тестах к этой библиотеки. работы с этой библиотекой (реализовывал атаки на JWT).

JWT Security Testing

https://portswigger.net/web-security/jwt
https://portswigger.net/web-security/jwt/algorithm-confusion
https://hackerone.com/reports/1210502
XXE
deserialization
jwk header injection
CVE-2017-2800
CVE-2018-2633
https://portswigger.net/web-security/jwt
https://jwt.io/
https://gist.github.com/zmts/802dc9c3510d79fd40f9dc38a12bccfc
https://www.iana.org/assignments/jose/jose.xhtml
jwcrypto
найти
Мои примеры
https://mazinahmed.net/blog/breaking-jwt
https://research.securitum.com/jwt-json-web-token-security/