CVE-2026-33046 Overview
CVE-2026-33046 is a high-severity vulnerability affecting CERN Indico, an event management system that uses Flask-Multipass for multi-backend authentication. The vulnerability exists in versions prior to 3.3.12 and allows authenticated attackers to bypass Indico's LaTeX sanitizer through specially-crafted LaTeX snippets, exploiting vulnerabilities in TeXLive and obscure LaTeX syntax. Successful exploitation enables reading local files or executing arbitrary code with the privileges of the user running Indico on the server.
Critical Impact
Authenticated attackers can achieve remote code execution on the Indico server by exploiting LaTeX sanitizer bypass vulnerabilities, potentially compromising sensitive conference and event data.
Affected Products
- CERN Indico versions prior to 3.3.12
- Deployments with server-side LaTeX rendering enabled (XELATEX_PATH configured in indico.conf)
- Systems not using containerized LaTeX rendering via podman
Discovery Timeline
- 2026-03-23 - CVE-2026-33046 published to NVD
- 2026-03-24 - Last updated in NVD database
Technical Details for CVE-2026-33046
Vulnerability Analysis
This vulnerability stems from insufficient input sanitization in Indico's LaTeX processing pipeline. The LaTeX sanitizer, designed to prevent malicious code execution, can be circumvented using obscure LaTeX syntax features and vulnerabilities present in the underlying TeXLive distribution. The attack requires low privileges (authenticated user access) and can be executed over the network without user interaction.
The core issue lies in how Indico parses and validates LaTeX double-caret escape sequences. LaTeX uses special syntax like ^^XX where XX represents hexadecimal character codes. Attackers can leverage this syntax to encode malicious commands that bypass the sanitizer's regular expression-based filtering, ultimately achieving code execution or local file disclosure.
Root Cause
The root cause is improper input validation (CWE-22 - Path Traversal) in Indico's LaTeX sanitization logic. The sanitizer failed to properly handle LaTeX's double-caret escape sequences (^^), which allow encoding arbitrary characters using hexadecimal notation. Additionally, the allowlist of safe math-mode commands included entries that could be abused to execute code or read files when combined with TeXLive vulnerabilities.
The patches reveal multiple iterations of fixes were required to properly address the regex patterns used for LaTeX sanitization, indicating the complexity of securing LaTeX processing.
Attack Vector
An authenticated attacker can craft malicious LaTeX snippets embedded within event content, abstracts, or other user-controllable fields that support LaTeX rendering. When Indico processes this content through XeLaTeX for PDF generation, the sanitizer bypass allows the malicious payload to execute. This can result in:
- Local File Disclosure - Reading sensitive configuration files, credentials, or other data accessible to the Indico process
- Remote Code Execution - Executing arbitrary commands with the privileges of the Indico service user
The following patches demonstrate how the security fix addresses the LaTeX caret parsing vulnerability:
def _resolve_latex_carets(text):
"""Resolve LaTeX double-caret escape sequences.
See this TeX.SE answer for details on how LaTeX handles such sequences:
https://tex.stackexchange.com/a/64848/1651
"""
done = False
while not done:
done = True
while m := re.search(r'(\^{2,})(?=[a-f0-9])', text):
num = len(m.group(1))
start = m.start(1)
end = m.end(1)
if not re.match(rf'[a-f0-9]{{{num}}}', text[end : end + num]):
break
ccode = int(text[end : end + num], 16)
char = chr(ccode) if ccode and ccode <= 0x10ffff else '' # avoid NULs and invalid charchodes
text = text[:start] + char + text[end + num :]
done = False
if m := re.search(r'(\^\^)([\\x00-\\xbf])', text):
start = m.start(1)
end = m.end(2)
ccode = ord(m.group(2))
Source: GitHub Commit 5f24d23c
Additionally, the patch removes dangerous commands from the allowlist and adds sanitization for the ^^5c escape sequence:
'&': r'\&',
'~': r'\~{}',
'_': r'\_',
+ '^^5c': r'\textbackslash{}',
'^': r'\^{}',
'\\': r'\textbackslash{}',
'\\x0c': '',
Source: GitHub Commit 1dbb1252
Detection Methods for CVE-2026-33046
Indicators of Compromise
- Unusual LaTeX content containing multiple caret sequences (^^) followed by hexadecimal characters in event submissions
- Unexpected file access attempts by the indico-uwsgi or indico-celery processes
- Process spawning from the Indico service context that is not typical of normal PDF generation
- Error logs showing LaTeX compilation failures with suspicious escape sequences
Detection Strategies
- Monitor web application logs for POST requests containing unusual character sequences in event creation or modification endpoints
- Implement file integrity monitoring on the Indico server to detect unauthorized file access
- Deploy runtime application security monitoring to detect code execution attempts from the LaTeX rendering process
- Review XeLaTeX subprocess execution patterns for anomalous command line arguments
Monitoring Recommendations
- Enable verbose logging for the LaTeX rendering subsystem to capture input content before processing
- Set up alerts for the Indico process accessing files outside expected directories (/etc/passwd, credential files, etc.)
- Monitor for unusual network connections originating from the Indico service user account
- Implement container escape detection if using containerized LaTeX rendering
How to Mitigate CVE-2026-33046
Immediate Actions Required
- Update CERN Indico to version 3.3.12 or later immediately
- Enable containerized LaTeX rendering using podman to isolate LaTeX execution from the host system
- If updating is not immediately possible, disable server-side LaTeX rendering as a temporary mitigation
- Review recent event submissions for potentially malicious LaTeX content
Patch Information
The vulnerability is addressed in Indico version 3.3.12. Multiple commits were required to fully remediate the issue:
- Commit 0adb70f0 - Fix LaTeX regexps (third iteration)
- Commit 1dbb1252 - Fix LaTeX regexps
- Commit 5f24d23c - Use more thorough LaTeX caret parser
- Commit fb169ced - Additional security fixes
For detailed information, refer to the GitHub Security Advisory GHSA-rm2q-f7jv-3cfp and the GitHub Release v3.3.12.
Workarounds
- Remove the XELATEX_PATH setting from indico.conf or set it to None to disable LaTeX functionality entirely
- Comment out the XELATEX_PATH configuration line in the Indico configuration file
- Restart both indico-uwsgi and indico-celery services after configuration changes
- Consider implementing network segmentation to limit the impact of potential compromise
# Configuration example - Disable LaTeX rendering in indico.conf
# Option 1: Comment out the setting
# XELATEX_PATH = '/usr/bin/xelatex'
# Option 2: Explicitly set to None
XELATEX_PATH = None
# Restart Indico services after configuration change
sudo systemctl restart indico-uwsgi
sudo systemctl restart indico-celery
# Recommended: Enable containerized LaTeX rendering for future use
# Configure podman-based rendering per Indico documentation
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


