TL;DR
Researcher @shreerajaput tìm ra một endpoint chỉ cần truyền user_id là server trả về session token hợp lệ — không yêu cầu password, không xác thực email, không có MFA. Tạo tài khoản và đăng nhập với danh tính bất kỳ chỉ trong một request. Bug được triaged P1 (Critical). Bài học: logic auth và session vẫn là chỗ đẻ ra lỗi nghiêm trọng nhất năm 2026, dù pattern này đã có tên từ 2003.
Chuyện gì vừa xảy ra
Theo bài đăng trên X, hunter test một endpoint có thể là magic-link, passwordless, hoặc account-linking flow. Khi anh ấy gửi request với chỉ một tham số user_id, server hồn nhiên mint một session token và trả về như thể đã đăng nhập thành công. Không có bước verify email, không có nonce, không có signed token kiểm tra ngược. Hệ quả trực tiếp: tạo tài khoản với bất kỳ ID nào, hoặc cướp session của user hiện hữu nếu user_id là số tuần tự.
Vì sao đây là P1
P1 trong khung phân loại bug bounty (HackerOne, Bugcrowd VRT) là tier Critical — thường tương đương với account takeover hàng loạt. Lỗi này hit nhiều tiêu chí P1 cùng lúc:
- Pre-auth: không cần credential nào.
- Privilege escalation: attacker hoá thành user bất kỳ.
- Mass exploitable:
user_idenumerable, scan cả database trong vài phút. - PoC tầm thường: một request curl, không cần chain gadget.
Điểm cộng của báo cáo này: hunter không chỉ chứng minh access được một account, mà chỉ ra cách issuance endpoint hoạt động — đây mới là thứ quyết định mức độ nghiêm trọng và bounty cuối cùng.
Technical facts: pattern auth-bypass này thuộc lớp nào
OWASP xếp lỗi vào nhóm A07:2021 Identification and Authentication Failures (tên cũ là Broken Authentication & Session Management). Root cause kinh điển: session token được suy ra từ input có entropy thấp hoặc người dùng kiểm soát được, thay vì sinh từ CSPRNG ≥128-bit.
Trong 2026 có vài CVE công khai cùng họ với lỗi này, cho thấy pattern không hề lỗi mốt:
| CVE / Advisory | Sản phẩm | Vấn đề | CVSS |
|---|---|---|---|
| CVE-2026-2439 | Concierge::Sessions (Perl) | Session ID fallback về rand() không an toàn | 9.8 |
| GHSA-9j5g-g4xm-57w7 | RAGFlow | API key & beta token cùng dùng URLSafeTimedSerializer với input đoán được — derive lẫn nhau | High |
Theo Ping Identity, tấn công session hijacking tăng 127% YoY trong 2026, riêng nhắm vào post-auth token tăng hơn 200%. HackerOne ghi nhận trung bình ~200 lỗi IDOR/auth được duyệt mỗi tháng — đây vẫn là class lỗi sinh nhiều bounty nhất.
So sánh: bug đơn giản vs bug phức tạp, ai trả nhiều hơn?
Một quan niệm sai phổ biến: bug càng phức tạp, bounty càng cao. Thực tế ngược lại với lớp auth/session:
- RCE qua deserialization: đẹp về kỹ thuật, nhưng nhiều khi cần chain 3–4 gadget, target khó setup. Bounty $10k–$50k tuỳ chương trình.
- Auth bypass kiểu này: 1 request, đọc HAR là ra. Cũng $5k–$50k vì impact tương đương account takeover toàn site.
Bài học cho hunter: đừng bỏ qua endpoint đơn giản chỉ vì nó có vẻ tầm thường. Token issuance, password reset, magic link, OAuth callback — đó là vùng đẻ ra P1 nhanh nhất.
Pattern này hay thấy ở đâu trong code thực tế
- Endpoint passwordless / magic link mint session ngay khi nhận request, trước khi verify email click-through.
- Mobile API tin tưởng header
X-User-Iddo client gửi. - OAuth/SSO callback bỏ qua kiểm tra
statehoặcnonce. - Internal admin tool "tạm" expose ra public mà thiếu middleware auth.
- Account-linking flow cấp session bên link mà không re-auth.
Cách defender chặn lớp lỗi này
Checklist tối thiểu cho team build SaaS / API năm 2026:
- Session ID phải sinh từ CSPRNG, ≥128-bit entropy. Tuyệt đối không derive từ
user_id, email, timestamp, hoặcrand(). - Endpoint cấp session phải qua xác thực thật: password + MFA, hoặc signed magic-link token có HMAC + TTL ngắn (≤15 phút) + one-time use.
- Dùng UUIDv4 hoặc opaque random string trong URL/body, không dùng integer tuần tự.
- Bind session với context phụ (IP, UA hash, device fingerprint) để phát hiện bất thường.
- Rotate session ID khi privilege thay đổi (sau login, sau role change).
- Rate limit + abuse detection trên route mint token.
- Pen-test thường xuyên với các payload:
user_id=1,user_id=null,user_id=victim@x.com, swap với account khác.
Bài học mang về
Lỗi này đáng nhớ không vì nó tinh vi — mà vì nó không tinh vi chút nào nhưng vẫn còn tồn tại trong sản phẩm production năm 2026. Auth và session là attack surface đòn bẩy cao nhất: một issuance endpoint sai làm vô hiệu mọi lớp bảo mật khác (encryption, RBAC, audit log, MFA…).
Cho builder: dành thời gian threat-model riêng cho vòng đời session — issuance, validation, rotation, expiry, revocation. Đừng chỉ test login form.
Cho hunter: 5 giây để thử "đưa user_id, có lấy được token không?" vẫn là một trong những bài test ROI cao nhất trong 2026.
Nguồn: @shreerajaput on X, OWASP Session Prediction, OWASP Session Management Cheat Sheet, TheHackerWire CVE-2026-2439, RedfoxSec Bug Bounty 2026.
