Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Fix potential XSS vulnerability in break_long_headers template filter #9435

Merged
merged 1 commit into from
Jun 14, 2024

Conversation

ch4n3-yoon
Copy link
Contributor

Description

The header input is now properly escaped before splitting and joining with <br> tags. This prevents potential XSS attacks if the header contains unsanitized user input.

This pull request addresses a potential XSS vulnerability in the break_long_headers template filter. By escaping the header input before processing, the risk of XSS attacks is mitigated.

The header input is now properly escaped before splitting and joining with <br> tags. This prevents potential XSS attacks if the header contains unsanitized user input.
Copy link
Contributor

@browniebroke browniebroke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably deserves a test

@tomchristie
Copy link
Member

@browniebroke Let's prioritise getting this sorted, rather than waiting on a test case.

I'd marginally prefer #9438 over this, since the line break isn't actually required however we should just go with whatever gets this resolved as quickly as possible at this point.

@tomchristie tomchristie merged commit 3b41f01 into encode:master Jun 14, 2024
7 checks passed
@ch4n3-yoon
Copy link
Contributor Author

I've identified a potential XSS vulnerability related to the break_long_headers template filter used in the rest_framework/base.html template file by APIView. This file employs the break_long_headers template filter, making the following code vulnerable to XSS attacks due to unsanitized user input:

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response

class Index(APIView):
    def get(self, request):
        username = request.GET.get('username', '')

        response = Response('OK')
        response['Location'] = f'https://x.com/{username}'
        return response

# urls.py
from django.urls import path
urlpatterns = [ path('api/', Index.as_view()), ]

I believe it is essential to register this issue as a CVE to ensure that users of earlier versions of DRF are aware and can manage this vulnerability appropriately. Your thoughts on this?

@ch4n3-yoon ch4n3-yoon deleted the fix/break_long_headers-filter branch June 14, 2024 10:12
FraCata00 pushed a commit to FraCata00/django-rest-framework that referenced this pull request Jun 20, 2024
tomchristie pushed a commit that referenced this pull request Jun 27, 2024
…9444)

Co-authored-by: Francesco <francesco.cataldo@spinforward.it>
vladislav1010 pushed a commit to vladislav1010/django-rest-framework that referenced this pull request Jul 5, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants