From 5b5799ab62142a8d33fa40b9531919f7f2abd897 Mon Sep 17 00:00:00 2001 From: Olivier Dumont Date: Tue, 30 Dec 2025 12:46:03 +0100 Subject: [PATCH] Fix XSS vulnerability: Escape user claims in HTML output User claims from ID tokens (username, name, email) were directly interpolated into HTML without escaping, allowing XSS attacks if malicious content was present in claims. This fix: - Imports html module for escaping - Escapes all user-controlled data before rendering in HTML - Escapes JSON output in pre tags as well - Prevents execution of malicious scripts in browser --- validation/oidc_whoami.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/validation/oidc_whoami.py b/validation/oidc_whoami.py index 587e77f..29aabb8 100644 --- a/validation/oidc_whoami.py +++ b/validation/oidc_whoami.py @@ -2,6 +2,7 @@ import os import sys import json +import html import webbrowser import secrets import time @@ -169,13 +170,13 @@ class CallbackHandler(BaseHTTPRequestHandler):

✅ Welcome back!

User Information

-

Username: {claims.get('preferred_username', claims.get('sub', 'N/A'))}

-

Name: {claims.get('name', 'N/A')}

-

Email: {claims.get('email', 'N/A')}

+

Username: {html.escape(str(claims.get('preferred_username', claims.get('sub', 'N/A'))))}

+

Name: {html.escape(str(claims.get('name', 'N/A')))}

+

Email: {html.escape(str(claims.get('email', 'N/A')))}


ID Token Claims:

-
{json.dumps(claims, indent=2)}
+
{html.escape(json.dumps(claims, indent=2))}
Logout