Miggo Logo

CVE-2009-2940: PyGreSQL Might Be Vulnerable to Encoding-Based SQL Injection

7.5

CVSS Score

Basic Information

EPSS Score
0.71831%
Published
5/2/2022
Updated
2/8/2024
KEV Status
No
Technology
TechnologyPython

Technical Details

CVSS Vector
AV:N/AC:L/Au:N/C:P/I:P/A:P
Package NameEcosystemVulnerable VersionsFirst Patched Version
PyGreSQLpip<= 3.8.1
PyGreSQLpip= 4.04.1

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability arises because PyGreSQL's module-level escaping functions (pg.escape_string and pg.escape_bytea) did not use PostgreSQL's connection-aware escaping functions (PQescapeStringConn/PQescapeByteaConn). The commit diff shows these functions were replaced with connection-dependent methods (e.g., connection.escape_string), and the documentation explicitly warns that the module-level functions lack connection-specific safety checks. The CVE and advisory confirm that these functions are unsafe for multi-byte encodings, making them the root cause of the SQL injection vulnerability.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

Py*r*SQL *.* *i* not us* Post*r*SQL’s s*** `strin*` *n* `*yt**` *un*tions in its own *s**pin* *un*tions. *s * r*sult, *ppli**tions writt*n to us* Py*r*SQL’s *s**pin* *un*tions *r* vuln*r**l* to SQL inj**tions w**n pro**ssin* **rt*in multi-*yt* ***r**

Reasoning

T** vuln*r**ility *ris*s ****us* Py*r*SQL's mo*ul*-l*v*l *s**pin* *un*tions (p*.*s**p*_strin* *n* p*.*s**p*_*yt**) *i* not us* Post*r*SQL's *onn**tion-*w*r* *s**pin* *un*tions (PQ*s**p*Strin**onn/PQ*s**p**yt***onn). T** *ommit *i** s*ows t**s* *un*ti