VYPR
High severityNVD Advisory· Published Sep 3, 2025· Updated Nov 4, 2025

CVE-2025-57833

CVE-2025-57833

Description

An issue was discovered in Django 4.2 before 4.2.24, 5.1 before 5.1.12, and 5.2 before 5.2.6. FilteredRelation is subject to SQL injection in column aliases, using a suitably crafted dictionary, with dictionary expansion, as the **kwargs passed QuerySet.annotate() or QuerySet.alias().

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
DjangoPyPI
< 4.2.244.2.24
DjangoPyPI
>= 5.0a1, < 5.1.125.1.12
DjangoPyPI
>= 5.2a1, < 5.2.65.2.6

Affected products

1

Patches

3
31334e6965ad

[4.2.x] Fixed CVE-2025-57833 -- Protected FilteredRelation against SQL injection in column aliases.

https://github.com/django/djangoJake HowardAug 13, 2025via ghsa
3 files changed · +32 0
  • django/db/models/sql/query.py+1 0 modified
    @@ -1620,6 +1620,7 @@ def build_filtered_relation_q(
             return target_clause
     
         def add_filtered_relation(self, filtered_relation, alias):
    +        self.check_alias(alias)
             filtered_relation.alias = alias
             lookups = dict(get_children_from_q(filtered_relation.condition))
             relation_lookup_parts, relation_field_parts, _ = self.solve_lookup_type(
    
  • docs/releases/4.2.24.txt+7 0 modified
    @@ -5,3 +5,10 @@ Django 4.2.24 release notes
     *September 3, 2025*
     
     Django 4.2.24 fixes a security issue with severity "high" in 4.2.23.
    +
    +CVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases
    +==============================================================================
    +
    +:class:`.FilteredRelation` was subject to SQL injection in column aliases,
    +using a suitably crafted dictionary, with dictionary expansion, as the
    +``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.
    
  • tests/annotations/tests.py+24 0 modified
    @@ -12,6 +12,7 @@
         Exists,
         ExpressionWrapper,
         F,
    +    FilteredRelation,
         FloatField,
         Func,
         IntegerField,
    @@ -1121,6 +1122,15 @@ def test_alias_sql_injection(self):
             with self.assertRaisesMessage(ValueError, msg):
                 Book.objects.annotate(**{crafted_alias: Value(1)})
     
    +    def test_alias_filtered_relation_sql_injection(self):
    +        crafted_alias = """injected_name" from "annotations_book"; --"""
    +        msg = (
    +            "Column aliases cannot contain whitespace characters, quotation marks, "
    +            "semicolons, or SQL comments."
    +        )
    +        with self.assertRaisesMessage(ValueError, msg):
    +            Book.objects.annotate(**{crafted_alias: FilteredRelation("author")})
    +
         def test_alias_forbidden_chars(self):
             tests = [
                 'al"ias',
    @@ -1146,6 +1156,11 @@ def test_alias_forbidden_chars(self):
                     with self.assertRaisesMessage(ValueError, msg):
                         Book.objects.annotate(**{crafted_alias: Value(1)})
     
    +                with self.assertRaisesMessage(ValueError, msg):
    +                    Book.objects.annotate(
    +                        **{crafted_alias: FilteredRelation("authors")}
    +                    )
    +
     
     class AliasTests(TestCase):
         @classmethod
    @@ -1418,3 +1433,12 @@ def test_alias_sql_injection(self):
             )
             with self.assertRaisesMessage(ValueError, msg):
                 Book.objects.alias(**{crafted_alias: Value(1)})
    +
    +    def test_alias_filtered_relation_sql_injection(self):
    +        crafted_alias = """injected_name" from "annotations_book"; --"""
    +        msg = (
    +            "Column aliases cannot contain whitespace characters, quotation marks, "
    +            "semicolons, or SQL comments."
    +        )
    +        with self.assertRaisesMessage(ValueError, msg):
    +            Book.objects.alias(**{crafted_alias: FilteredRelation("authors")})
    
4c044fcc866e

[5.2.x] Fixed CVE-2025-57833 -- Protected FilteredRelation against SQL injection in column aliases.

https://github.com/django/djangoJake HowardAug 13, 2025via ghsa
5 files changed · +46 0
  • django/db/models/sql/query.py+1 0 modified
    @@ -1696,6 +1696,7 @@ def _add_q(
             return target_clause, needed_inner
     
         def add_filtered_relation(self, filtered_relation, alias):
    +        self.check_alias(alias)
             filtered_relation.alias = alias
             relation_lookup_parts, relation_field_parts, _ = self.solve_lookup_type(
                 filtered_relation.relation_name
    
  • docs/releases/4.2.24.txt+7 0 modified
    @@ -5,3 +5,10 @@ Django 4.2.24 release notes
     *September 3, 2025*
     
     Django 4.2.24 fixes a security issue with severity "high" in 4.2.23.
    +
    +CVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases
    +==============================================================================
    +
    +:class:`.FilteredRelation` was subject to SQL injection in column aliases,
    +using a suitably crafted dictionary, with dictionary expansion, as the
    +``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.
    
  • docs/releases/5.1.12.txt+7 0 modified
    @@ -5,3 +5,10 @@ Django 5.1.12 release notes
     *September 3, 2025*
     
     Django 5.1.12 fixes a security issue with severity "high" in 5.1.11.
    +
    +CVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases
    +==============================================================================
    +
    +:class:`.FilteredRelation` was subject to SQL injection in column aliases,
    +using a suitably crafted dictionary, with dictionary expansion, as the
    +``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.
    
  • docs/releases/5.2.6.txt+7 0 modified
    @@ -6,6 +6,13 @@ Django 5.2.6 release notes
     
     Django 5.2.6 fixes a security issue with severity "high" and one bug in 5.2.5.
     
    +CVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases
    +==============================================================================
    +
    +:class:`.FilteredRelation` was subject to SQL injection in column aliases,
    +using a suitably crafted dictionary, with dictionary expansion, as the
    +``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.
    +
     Bugfixes
     ========
     
    
  • tests/annotations/tests.py+24 0 modified
    @@ -14,6 +14,7 @@
         Exists,
         ExpressionWrapper,
         F,
    +    FilteredRelation,
         FloatField,
         Func,
         IntegerField,
    @@ -1164,6 +1165,15 @@ def test_alias_sql_injection(self):
             with self.assertRaisesMessage(ValueError, msg):
                 Book.objects.annotate(**{crafted_alias: Value(1)})
     
    +    def test_alias_filtered_relation_sql_injection(self):
    +        crafted_alias = """injected_name" from "annotations_book"; --"""
    +        msg = (
    +            "Column aliases cannot contain whitespace characters, quotation marks, "
    +            "semicolons, or SQL comments."
    +        )
    +        with self.assertRaisesMessage(ValueError, msg):
    +            Book.objects.annotate(**{crafted_alias: FilteredRelation("author")})
    +
         def test_alias_forbidden_chars(self):
             tests = [
                 'al"ias',
    @@ -1189,6 +1199,11 @@ def test_alias_forbidden_chars(self):
                     with self.assertRaisesMessage(ValueError, msg):
                         Book.objects.annotate(**{crafted_alias: Value(1)})
     
    +                with self.assertRaisesMessage(ValueError, msg):
    +                    Book.objects.annotate(
    +                        **{crafted_alias: FilteredRelation("authors")}
    +                    )
    +
         @skipUnless(connection.vendor == "postgresql", "PostgreSQL tests")
         @skipUnlessDBFeature("supports_json_field")
         def test_set_returning_functions(self):
    @@ -1482,3 +1497,12 @@ def test_alias_sql_injection(self):
             )
             with self.assertRaisesMessage(ValueError, msg):
                 Book.objects.alias(**{crafted_alias: Value(1)})
    +
    +    def test_alias_filtered_relation_sql_injection(self):
    +        crafted_alias = """injected_name" from "annotations_book"; --"""
    +        msg = (
    +            "Column aliases cannot contain whitespace characters, quotation marks, "
    +            "semicolons, or SQL comments."
    +        )
    +        with self.assertRaisesMessage(ValueError, msg):
    +            Book.objects.alias(**{crafted_alias: FilteredRelation("authors")})
    
102965ea9307

[5.1.x] Fixed CVE-2025-57833 -- Protected FilteredRelation against SQL injection in column aliases.

https://github.com/django/djangoJake HowardAug 13, 2025via ghsa
4 files changed · +39 0
  • django/db/models/sql/query.py+1 0 modified
    @@ -1659,6 +1659,7 @@ def _add_q(
             return target_clause, needed_inner
     
         def add_filtered_relation(self, filtered_relation, alias):
    +        self.check_alias(alias)
             filtered_relation.alias = alias
             relation_lookup_parts, relation_field_parts, _ = self.solve_lookup_type(
                 filtered_relation.relation_name
    
  • docs/releases/4.2.24.txt+7 0 modified
    @@ -5,3 +5,10 @@ Django 4.2.24 release notes
     *September 3, 2025*
     
     Django 4.2.24 fixes a security issue with severity "high" in 4.2.23.
    +
    +CVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases
    +==============================================================================
    +
    +:class:`.FilteredRelation` was subject to SQL injection in column aliases,
    +using a suitably crafted dictionary, with dictionary expansion, as the
    +``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.
    
  • docs/releases/5.1.12.txt+7 0 modified
    @@ -5,3 +5,10 @@ Django 5.1.12 release notes
     *September 3, 2025*
     
     Django 5.1.12 fixes a security issue with severity "high" in 5.1.11.
    +
    +CVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases
    +==============================================================================
    +
    +:class:`.FilteredRelation` was subject to SQL injection in column aliases,
    +using a suitably crafted dictionary, with dictionary expansion, as the
    +``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.
    
  • tests/annotations/tests.py+24 0 modified
    @@ -12,6 +12,7 @@
         Exists,
         ExpressionWrapper,
         F,
    +    FilteredRelation,
         FloatField,
         Func,
         IntegerField,
    @@ -1132,6 +1133,15 @@ def test_alias_sql_injection(self):
             with self.assertRaisesMessage(ValueError, msg):
                 Book.objects.annotate(**{crafted_alias: Value(1)})
     
    +    def test_alias_filtered_relation_sql_injection(self):
    +        crafted_alias = """injected_name" from "annotations_book"; --"""
    +        msg = (
    +            "Column aliases cannot contain whitespace characters, quotation marks, "
    +            "semicolons, or SQL comments."
    +        )
    +        with self.assertRaisesMessage(ValueError, msg):
    +            Book.objects.annotate(**{crafted_alias: FilteredRelation("author")})
    +
         def test_alias_forbidden_chars(self):
             tests = [
                 'al"ias',
    @@ -1157,6 +1167,11 @@ def test_alias_forbidden_chars(self):
                     with self.assertRaisesMessage(ValueError, msg):
                         Book.objects.annotate(**{crafted_alias: Value(1)})
     
    +                with self.assertRaisesMessage(ValueError, msg):
    +                    Book.objects.annotate(
    +                        **{crafted_alias: FilteredRelation("authors")}
    +                    )
    +
     
     class AliasTests(TestCase):
         @classmethod
    @@ -1429,3 +1444,12 @@ def test_alias_sql_injection(self):
             )
             with self.assertRaisesMessage(ValueError, msg):
                 Book.objects.alias(**{crafted_alias: Value(1)})
    +
    +    def test_alias_filtered_relation_sql_injection(self):
    +        crafted_alias = """injected_name" from "annotations_book"; --"""
    +        msg = (
    +            "Column aliases cannot contain whitespace characters, quotation marks, "
    +            "semicolons, or SQL comments."
    +        )
    +        with self.assertRaisesMessage(ValueError, msg):
    +            Book.objects.alias(**{crafted_alias: FilteredRelation("authors")})
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

13

News mentions

0

No linked articles in our index yet.