Opened 3 weeks ago
Closed 3 weeks ago
#36868 closed Bug (invalid)
Bugs is normalize() function
| Reported by: | hhellbentt | Owned by: | |
|---|---|---|---|
| Component: | Core (URLs) | Version: | 6.0 |
| Severity: | Normal | Keywords: | |
| Cc: | hhellbentt | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Hello, I am engaged in fuzzing testing and have found two bugs in your project (possibly vulnerabilities, but when reproduced, the project does not crash, which means they are simply bugs).
The normalize function from https://github.com/django/django/blob/main/django/utils/regex_helper.py
Crashes when receiving the following data in two cases:
1) curl -X POST http://127.0.0.1:8000/regex/ --data-binary $'pattern=
\266\367 (two backslashes break the logic)
2) when receiving unpaired opening and closing tags, the pop() array method attempts to remove something that does not exist from an empty array.
I think this is potentially a vector for a DOS attack. I hope you will fix this as soon as possible.
Translated with DeepL.com (free version)
Attachments (3)
Change History (4)
by , 3 weeks ago
| Attachment: | photo_2026-01-15_19-51-44.jpg added |
|---|
by , 3 weeks ago
| Attachment: | {21C0D829-3A4C-4F29-A562-B5CB4F812ADB}.png added |
|---|
by , 3 weeks ago
comment:1 by , 3 weeks ago
| Component: | Forms → Core (URLs) |
|---|---|
| Resolution: | → invalid |
| Status: | new → closed |
| Type: | Uncategorized → Bug |
Hello hhellbentt, thank you for your report. However, there are a couple of issues with this submission.
First of all, if you believe you've found a security vulnerability, report it to security@…, not on the public tracker. See our security policy.
Second, this is not a valid vector for a DOS attack: the
normalize()function is internal and documented as "not intended for external use." It is only called during URL resolution with developer-defined patterns fromurls.py,loaded at startup. There is no code path in Django where user input reaches this function.I believe your proof of concept requires custom code that passes unsanitized user input to an internal API:
This is not a Django vulnerability. Per our reporting guidelines:
If you can provide a proof of concept that follows our reporting guidelines, specifically one that does not rely on passing unsanitized user input to internal APIs, please submit it to security@….
The edge cases you identified (unmatched parentheses, trailing backslashes) cannot be triggered by attackers in standard Django usage. If you'd like them handled more gracefully, you're welcome to submit a patch.