A forgotten `state` parameter and a missing form key let an attacker glue their Google login onto your admin's forum account
phpBB's OAuth linker never forwarded the state value to the underlying OAuth2 library, so the callback couldn't verify that the flow it was completing was one the victim actually initiated. Layered on top of that, the auth-link endpoint didn't check phpBB's form_key CSRF token, meaning a plain GET carrying an attacker-supplied code= would silently bind the attacker's Google/Facebook/Bitly identity to whoever loaded the URL. Affects phpBB 3.3.0 through 3.3.16; fixed in 3.3.17 (released 6 June 2026). Only relevant if an administrator explicitly enabled an OAuth provider in the ACP — stock installs never register the OAuth service, so they're not on the attack surface.
The vendor HIGH (8.0) rating is fair for the specific site profile it applies to: a forum with OAuth turned on, a logged-in victim, and someone willing to click a crafted image or link. But that's a narrow slice of the phpBB installed base, phpBB itself is a bulletin-board (not identity infrastructure), and the blast radius stops at forum-level accounts. Practitioner reality lands this as MEDIUM — worth patching promptly but not a fire drill.
4 steps from start to impact.
Attacker starts an OAuth flow against their own provider account
/ucp.php?mode=login_link&link=1&oauth_service=google endpoint (or an intercepted callback), the attacker walks through Google/Facebook/Bitly login with their own credentials and captures the returned code= value before it is consumed. Tools: Burp Suite proxy or a scripted requests session to intercept the redirect.- Target phpBB has OAuth configured (Google, Facebook, or Bitly)
- Attacker has a valid account with the same OAuth provider
- Default phpBB installs do not enable OAuth — administrator opt-in required
- OAuth authorization codes are short-lived (typically 60 seconds for Google), narrowing the delivery window
Attacker crafts a link to the vulnerable auth-link endpoint
auth-link never checks the phpBB form_key, a bare GET with the intercepted code and oauth_service parameters is sufficient. The URL can be embedded as an [img] BBCode tag inside a forum post, a private message, or a phishing email — no interaction beyond page load is required from the victim.- Attacker can post BBCode / send PMs / deliver a URL to the victim
- BBCode
[img]may be disabled on hardened boards - SameSite=Lax on session cookies blocks the request unless it's a top-level navigation — modern browsers default to Lax
Victim, already logged into phpBB, loads the URL
auth-link. phpBB accepts the request, calls into the OAuth library without the state parameter, and skips its own CSRF check. The attacker's OAuth identity is now bound to the victim's phpBB user_id in phpbb_oauth_accounts.- Victim is currently logged into phpBB
- Victim's browser sends session cookies to the phpBB origin
- Victim must be actively logged in at the moment of click
- SameSite=Lax means a cross-site
[img]won't send cookies — attack works best when hosted on-forum
auth-link action from the victim's IP — retro-hunt after disclosure.Attacker logs into victim's account via OAuth
user_id. The attacker is now signed in as the victim — including any moderator or administrator privileges.- OAuth login remains enabled
- Binding row remains in
phpbb_oauth_accounts
- phpBB 2FA (if enabled on the victim account via an extension) still applies for standard login but may be bypassed on OAuth login depending on extension
The supporting signals.
| In-the-wild exploitation | None observed as of July 2026. No KEV listing, no public exploitation reports on GreyNoise or Shadowserver. |
|---|---|
| Public proof-of-concept | Full technical write-up by Pentest-Tools.com research team (PTT-2026-005) — includes exploitation steps but no packaged exploit. |
| EPSS | 0.0012 (~0.12% — bottom quartile of exploitation likelihood). |
| KEV status | Not listed. |
| CVSS vector | NVD: CVSS:3.0/AV:N/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:H = 8.0. Pentest-Tools alt: AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:L = 8.3. Both HIGH; UI:R (victim click) and PR:L/config gating are the levers. |
| Affected versions | phpBB 3.3.0 – 3.3.16 with OAuth enabled (Google, Facebook, or Bitly provider). |
| Fixed version | phpBB 3.3.17 (released 2026-06-06). Adds state propagation, form-key check on auth-link, and a cleanup task for stale OAuth bindings. |
| Exposure population | phpBB powers a large slice of self-hosted forums, but OAuth is opt-in and not the default. Shodan search http.html:"phpBB" returns ~120k hosts; the OAuth-enabled subset is a minority. |
| Disclosure | Published 2026-06-12 via HackerOne; patch preceded disclosure by 6 days. |
| Reporter | Pentest-Tools.com research team (chained with sibling CVE-2026-48611). |
noisgate verdict.
The decisive factor is narrow addressable surface: exploitation requires an OAuth provider to be explicitly configured (non-default), a currently-logged-in victim, and a click on attacker content — three compounding gates on a bulletin-board application whose blast radius stops at forum accounts. phpBB is not an identity provider, hypervisor, or edge appliance, so no role-multiplier floor pushes this above HIGH.
Why this verdict
- Configuration gate: default phpBB installations do not enable OAuth. Only administrators who deliberately wired up Google/Facebook/Bitly SSO are exposed — a minority of the ~120k Shodan-visible phpBB instances.
- User-interaction requirement: the chain terminates only when a *currently-logged-in* victim loads the crafted URL. SameSite=Lax cookie defaults in modern Chromium/Firefox block cross-site
[img]-tag delivery, forcing the attacker to host the link on the target forum itself. - Short-lived OAuth code: provider authorization codes expire in ~60 seconds, requiring the attacker to coordinate code capture and victim click in real time.
- Role multiplier — bulletin board (typical role): chain succeeds; blast radius = one forum account per victim, potentially escalating to forum admin if the admin is the victim. No pivot to OS, network, or federated identity.
- Role multiplier — high-value roles: phpBB is canonically a discussion forum. It is not an IdP, PAM, hypervisor, CA, backup, or edge appliance. There is no realistic deployment role where this chain ends in fleet compromise, so no CRITICAL floor applies.
- No active exploitation: EPSS 0.0012, not on KEV, no honeypot hits, no packaged Metasploit/exploit-db module as of July 2026.
Why not higher?
Vendor HIGH (8.0) assumes the OAuth-enabled configuration and a UI:R win. Under real deployment friction — opt-in provider, live-session victim, SameSite constraints, 60-second code TTL, no observed exploitation — HIGH overstates urgency. Nothing in the chain reaches host, network, or federated identity impact.
Why not lower?
It's a straightforward, well-documented account-takeover chain with a public write-up naming the exact endpoint and parameters. On forums where OAuth is enabled and an administrator is the victim, the outcome is forum-admin compromise — not backlog-hygiene territory. LOW would understate that.
What to do — in priority order.
- Disable OAuth authentication in the ACP until 3.3.17 is deployed — ACP → Authentication → set method back to
db. This removes the entire attack surface immediately. Do this within the noisgate MEDIUM window — no formal mitigation SLA, but 24-48 hours is trivial and eliminates risk pending the patch. - Upgrade to phpBB 3.3.17 or later — The fix adds
statepropagation to the OAuth callback, aform_keycheck onauth-link, and a scheduled cleanup task to purge orphaned bindings. Full upgrade within the noisgate remediation SLA of 365 days — but for public-facing OAuth-enabled forums, aim for 30 days. - Audit
phpbb_oauth_accountsfor suspicious bindings created before the patch — RunSELECT user_id, provider, oauth_provider_id, COUNT(*) FROM phpbb_oauth_accounts GROUP BY user_id HAVING COUNT(*) > 1;and review recently-created rows. Any binding attributable to an unexpected external identity should be revoked and the user notified to rotate credentials. - Force password reset and OAuth unlink for admin/moderator accounts on OAuth-enabled boards — Privileged accounts are the highest-value targets. If OAuth was enabled between 3.3.0 and 3.3.17, treat admin OAuth bindings as suspect and re-enroll after upgrade.
- WAF signatures — the exploit URL is indistinguishable from a legitimate OAuth callback; there is no anomalous payload.
- MFA on the phpBB local password — the attacker logs in via OAuth, bypassing the local password flow entirely.
- Rate limiting — a single request per victim delivers the takeover; there is nothing to throttle.
- CAPTCHA on registration — the vulnerability is on
auth-link, not registration.
Crowdsourced verification payload.
Run this from an auditor workstation with curl available. Point it at the target forum's base URL — e.g. ./check_phpbb.sh https://forum.example.com. No authentication required; it only reads the public version banner and looks for the OAuth login option on the login page.
#!/usr/bin/env bash
# noisgate: CVE-2026-48612 phpBB OAuth CSRF check
# Usage: ./check_phpbb.sh <base_url>
# Exit: 0 = PATCHED / not applicable, 1 = VULNERABLE, 2 = UNKNOWN
set -u
BASE="${1:-}"
if [[ -z "$BASE" ]]; then
echo "Usage: $0 <phpbb_base_url>" >&2
exit 2
fi
UA='noisgate-phpbb-check/1.0'
TMP=$(mktemp)
trap 'rm -f "$TMP"' EXIT
# 1. Grab a page likely to include the phpBB generator meta tag
if ! curl -sSL -A "$UA" --max-time 15 "$BASE/" -o "$TMP"; then
echo "UNKNOWN: could not fetch $BASE" >&2
exit 2
fi
# 2. Extract phpBB version
VER=$(grep -oE 'phpBB[[:space:]]*[0-9]+\.[0-9]+\.[0-9]+' "$TMP" | head -n1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
if [[ -z "$VER" ]]; then
# Try the styles fingerprint
VER=$(grep -oE 'assets/javascript/[a-z]+\.js\?assets_version=[0-9]+' "$TMP" | head -n1)
if [[ -z "$VER" ]]; then
echo "UNKNOWN: phpBB version not disclosed in HTML" >&2
exit 2
fi
echo "UNKNOWN: version banner suppressed; manual check required" >&2
exit 2
fi
echo "Detected phpBB version: $VER"
# 3. semver compare vs 3.3.17
IFS=. read -r MAJ MIN PATCH <<< "$VER"
vuln=0
if (( MAJ < 3 )); then vuln=0
elif (( MAJ == 3 && MIN < 3 )); then vuln=0 # pre-3.3.x line not in advisory
elif (( MAJ == 3 && MIN == 3 && PATCH < 17 )); then vuln=1
fi
# 4. Check whether OAuth login option is exposed on the login page
OAUTH=0
if curl -sSL -A "$UA" --max-time 15 "$BASE/ucp.php?mode=login" | grep -qiE 'oauth|google|facebook|bitly'; then
OAUTH=1
fi
if (( vuln == 1 && OAUTH == 1 )); then
echo "VULNERABLE: phpBB $VER with OAuth exposed. Upgrade to 3.3.17."
exit 1
elif (( vuln == 1 && OAUTH == 0 )); then
echo "PATCHED (effectively): phpBB $VER < 3.3.17 but no OAuth provider surfaced on login. Still upgrade."
exit 0
else
echo "PATCHED: phpBB $VER >= 3.3.17."
exit 0
fi
If you remember one thing.
phpbb_oauth_accounts for pre-patch bindings on admin/moderator users and re-enroll. No fire drill; no KEV; no active exploitation — this is scheduled maintenance, not incident response.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.