Cloudanix VulnDB

CVE-2023-27043

Medium · 5.3

CVSS

5.3

EPSS

2.5%

Published

Apr 19, 2023

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

A flaw in Python's email handling can let attackers slip past checks that only allow email addresses from approved domains, potentially giving them access they should not have.

Exploit Available
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Privilege Gain
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The email module in Python incorrectly parses addresses containing special characters by misidentifying the addr-spec portion of RFC2822 headers in email/_parseaddr.py, allowing an attacker-supplied value from an arbitrary domain to be treated as valid.

Why it matters to the business

Applications that gate access or registration on verified email domains can be bypassed, resulting in unauthorized account creation or access without requiring changes to infrastructure or credentials.

How an attack unfolds

An attacker supplies a crafted email address containing special characters that causes the Python parser to extract an addr-spec from the wrong header segment; the application then accepts the address as belonging to an allowed domain, granting access or registration.

How to fix it

Upgrade Python to a build containing commit a4a2d2b0d85273f746c3834ce2753e19c898949d or later; re-test any custom email address validation logic after the upgrade.

How to confirm the fix worked

Replay known malicious addresses containing special characters against the updated email parser and confirm that only the correct addr-spec from an allowed domain is extracted.

Typical attack path

  1. Identify an application that uses Python's email module to validate incoming addresses against a domain allow-list
  2. Craft an address containing special characters that shifts the parsed addr-spec to an attacker-controlled domain
  3. Submit the address during signup or authentication flow
  4. Receive successful validation and obtain unauthorized access or account

How to detect it

Review application logs for email address validation events that succeed with addresses containing unusual characters or mixed domains; correlate with signup or authentication attempts from unexpected sources.

What your security team should do

  • Apply the Python fix commit a4a2d2b0d85273f746c3834ce2753e19c898949d across all affected environments
  • Audit code that relies on email address domain checks for access control and add secondary validation
  • Monitor EPSS and exploit availability trends for this issue to adjust patching priority

The record

The email module of Python through 3.11.3 incorrectly parses e-mail addresses that contain a special character. The wrong portion of an RFC2822 header is identified as the value of the addr-spec. In some applications, an attacker can bypass a protection mechanism in which application access is granted only after verifying receipt of e-mail to a specific domain (e.g., only @company.example.com addresses may be used for signup). This occurs in email/_parseaddr.py in recent versions of Python.

Affected packages

Ecosystem Package Introduced Fixed
AlmaLinux:8 platform-python 0 3.6.8-56.el8_9.3.alma.1
AlmaLinux:8 platform-python-debug 0 3.6.8-56.el8_9.3.alma.1
AlmaLinux:8 platform-python-devel 0 3.6.8-56.el8_9.3.alma.1
AlmaLinux:8 python3-idle 0 3.6.8-56.el8_9.3.alma.1
AlmaLinux:8 python3-libs 0 3.6.8-56.el8_9.3.alma.1
AlmaLinux:8 python3-test 0 3.6.8-56.el8_9.3.alma.1
AlmaLinux:8 python3-tkinter 0 3.6.8-56.el8_9.3.alma.1
AlmaLinux:8 python3.11 0 3.11.7-1.el8
AlmaLinux:8 python3.11-debug 0 3.11.7-1.el8
AlmaLinux:8 python3.11-devel 0 3.11.7-1.el8
AlmaLinux:8 python3.11-idle 0 3.11.7-1.el8
AlmaLinux:8 python3.11-libs 0 3.11.7-1.el8
AlmaLinux:8 python3.11-rpm-macros 0 3.11.7-1.el8
AlmaLinux:8 python3.11-test 0 3.11.7-1.el8
AlmaLinux:8 python3.11-tkinter 0 3.11.7-1.el8
AlmaLinux:8 python39 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-Cython 0 0.29.21-5.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-Cython 0 0.29.21-5.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-PyMySQL 0 0.10.1-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-attrs 0 20.3.0-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-cffi 0 1.14.3-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-cffi 0 1.14.3-2.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-chardet 0 3.0.4-19.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-cryptography 0 3.3.1-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-debug 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-devel 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-idle 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-idna 0 2.10-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-iniconfig 0 1.1.1-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-libs 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-lxml 0 4.6.5-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-lxml 0 4.6.5-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-mod_wsgi 0 4.7.1-7.module_el8.9.0+3634+fb2a896c
AlmaLinux:8 python39-more-itertools 0 8.5.0-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy 0 1.19.4-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy 0 1.19.4-3.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-numpy-doc 0 1.19.4-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy-f2py 0 1.19.4-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy-f2py 0 1.19.4-3.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-packaging 0 20.4-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pip 0 20.2.4-9.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-pip-wheel 0 20.2.4-9.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-pluggy 0 0.13.1-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-ply 0 3.11-10.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-psutil 0 5.8.0-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-psutil 0 5.8.0-4.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-psycopg2 0 2.8.6-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-psycopg2-doc 0 2.8.6-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-psycopg2-tests 0 2.8.6-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-py 0 1.10.0-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pybind11 0 2.7.1-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pybind11 0 2.7.1-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-pybind11-devel 0 2.7.1-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pybind11-devel 0 2.7.1-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-pycparser 0 2.20-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pyparsing 0 2.4.7-5.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pysocks 0 1.7.1-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pytest 0 6.0.2-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pyyaml 0 5.4.1-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pyyaml 0 5.4.1-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-requests 0 2.25.0-3.module_el8.9.0+3634+fb2a896c
AlmaLinux:8 python39-rpm-macros 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-scipy 0 1.5.4-5.module_el8.9.0+3634+fb2a896c
AlmaLinux:8 python39-setuptools 0 50.3.2-5.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-setuptools-wheel 0 50.3.2-5.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-six 0 1.15.0-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-test 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-tkinter 0 3.9.18-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-toml 0 0.10.1-5.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-urllib3 0 1.25.10-5.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-wcwidth 0 0.2.5-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-wheel 0 1:0.35.1-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-wheel-wheel 0 1:0.35.1-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:9 python-unversioned-command 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3-debug 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3-devel 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3-idle 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3-libs 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3-test 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3-tkinter 0 3.9.18-1.el9_3.1
AlmaLinux:9 python3.11 0 3.11.7-1.el9
AlmaLinux:9 python3.11-debug 0 3.11.7-1.el9
AlmaLinux:9 python3.11-devel 0 3.11.7-1.el9
AlmaLinux:9 python3.11-idle 0 3.11.7-1.el9
AlmaLinux:9 python3.11-libs 0 3.11.7-1.el9
AlmaLinux:9 python3.11-test 0 3.11.7-1.el9
AlmaLinux:9 python3.11-tkinter 0 3.11.7-1.el9
Alpine:v3.17 python3 0 3.10.15-r0
Alpine:v3.18 python3 0 3.11.10-r0
Alpine:v3.19 python3 0 3.11.10-r0
Alpine:v3.20 python3 0 3.12.6-r0
Alpine:v3.21 python3 0 3.12.6-r0
Alpine:v3.22 python3 0 3.12.6-r0
Bitnami libpython 0 3.8.20
Bitnami python 0 2.7.18
Bitnami python 0 3.8.20
Bitnami python-min 0 3.8.20
Chainguard conda 0 25.3.0-r0
Chainguard conda-init 0 25.3.0-r0
Chainguard conda-wrapper 0 25.3.0-r0
Chainguard py3-supported-conda 0 25.3.0-r0
Chainguard py3.10-conda 0 25.3.0-r0
Chainguard py3.10-conda-bin 0 25.3.0-r0
Chainguard py3.11-conda 0 25.3.0-r0
Chainguard py3.11-conda-bin 0 25.3.0-r0
Chainguard py3.12-conda 0 25.3.0-r0
Chainguard py3.12-conda-bin 0 25.3.0-r0
Chainguard python-3.10 0 3.10.13-r5
Chainguard python-3.10-base 0 3.10.13-r5
Chainguard python-3.10-base-dev 0 3.10.13-r5
Chainguard python-3.10-dev 0 3.10.13-r5
Chainguard python-3.10-doc 0 3.10.13-r5
Chainguard python-3.11 0 3.11.8-r1
Chainguard python-3.11-base 0 3.11.8-r1
Chainguard python-3.11-base-dev 0 3.11.8-r1
Chainguard python-3.11-dev 0 3.11.8-r1
Chainguard python-3.11-doc 0 3.11.8-r1
Chainguard python-3.8 0 3.8.18-r5
Chainguard python-3.8-base 0 3.8.18-r5
Chainguard python-3.8-base-dev 0 3.8.18-r5
Chainguard python-3.8-default 0 3.8.18-r5
Chainguard python-3.8-dev 0 3.8.18-r5
Chainguard python-3.8-doc 0 3.8.18-r5
Chainguard python-3.9 0 3.9.18-r4
Chainguard python-3.9-base 0 3.9.18-r4
Chainguard python-3.9-base-dev 0 3.9.18-r4
Chainguard python-3.9-default 0 3.9.18-r4
Chainguard python-3.9-dev 0 3.9.18-r4
Chainguard python-3.9-doc 0 3.9.18-r4
Debian:11 pypy3 0 No fix
Debian:11 pypy3 0 7.3.5+dfsg-2+deb11u4
Debian:11 python2.7 0 No fix
Debian:11 python3.9 0 No fix
Debian:11 python3.9 0 3.9.2-1+deb11u2
Debian:12 pypy3 0 No fix
Debian:12 python3.11 0 No fix
Debian:13 pypy3 0 No fix
Debian:13 python3.12 0 3.12.6-1
Mageia:9 python3 0 3.10.11-1.3.mga9
Red Hat:enterprise_linux:8::appstream PyYAML 0 0:5.4.1-1.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream PyYAML-debugsource 0 0:5.4.1-1.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream mod_wsgi 0 0:4.7.1-7.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream numpy 0 0:1.19.4-3.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream numpy-debugsource 0 0:1.19.4-3.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream platform-python 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream platform-python-debug 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream platform-python-devel 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python-PyMySQL 0 0:0.10.1-2.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-cffi 0 0:1.14.3-2.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-cffi-debugsource 0 0:1.14.3-2.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-chardet 0 0:3.0.4-19.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-cryptography 0 0:3.3.1-3.module+el8.10.0+21271+eccd1d86
Red Hat:enterprise_linux:8::appstream python-cryptography-debugsource 0 0:3.3.1-3.module+el8.10.0+21271+eccd1d86
Red Hat:enterprise_linux:8::appstream python-idna 0 0:2.10-3.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-lxml 0 0:4.6.5-1.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-lxml-debugsource 0 0:4.6.5-1.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-ply 0 0:3.11-10.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-psutil 0 0:5.8.0-4.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-psutil-debugsource 0 0:5.8.0-4.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-psycopg2 0 0:2.8.6-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python-psycopg2-debugsource 0 0:2.8.6-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python-pycparser 0 0:2.20-3.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-pysocks 0 0:1.7.1-4.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-requests 0 0:2.25.0-3.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-toml 0 0:0.10.1-5.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python-urllib3 0 0:1.25.10-5.module+el8.10.0+20443+f0a692fe
Red Hat:enterprise_linux:8::appstream python-wheel 0 1:0.35.1-4.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python3 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python3-debuginfo 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python3-debugsource 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python3-idle 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python3-libs 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python3-test 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python3-tkinter 0 0:3.6.8-56.el8_9.3
Red Hat:enterprise_linux:8::appstream python3.11 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-debug 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-debuginfo 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-debugsource 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-devel 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-idle 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-libs 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-rpm-macros 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-test 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python3.11-tkinter 0 0:3.11.7-1.el8
Red Hat:enterprise_linux:8::appstream python39 0 0:3.9.18-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python39-PyMySQL 0 0:0.10.1-2.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python39-cffi 0 0:1.14.3-2.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python39-cffi-debuginfo 0 0:1.14.3-2.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python39-chardet 0 0:3.0.4-19.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python39-cryptography 0 0:3.3.1-3.module+el8.10.0+21271+eccd1d86
Red Hat:enterprise_linux:8::appstream python39-cryptography-debuginfo 0 0:3.3.1-3.module+el8.10.0+21271+eccd1d86
Red Hat:enterprise_linux:8::appstream python39-debuginfo 0 0:3.9.18-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python39-debugsource 0 0:3.9.18-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python39-devel 0 0:3.9.18-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python39-idle 0 0:3.9.18-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python39-idna 0 0:2.10-3.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python39-libs 0 0:3.9.18-3.module+el8.10.0+21142+453d2b75
Red Hat:enterprise_linux:8::appstream python39-lxml 0 0:4.6.5-1.module+el8.9.0+19644+d68f775d
Red Hat:enterprise_linux:8::appstream python39-lxml-debuginfo 0 0:4.6.5-1.module+el8.9.0+19644+d68f775d

Related vulnerabilities