Security Vulnerability: Open Redirect in Delete Endpoints · Issue #184 · fastapi-admin/fastapi-admin · GitHub
Skip to content

Security Vulnerability: Open Redirect in Delete Endpoints #184

Description

@crit0x90

Description

I've discovered an open redirect vulnerability in this project. The issue exists in both the delete and bulk_delete endpoints in the resources.py file, where the application uses the HTTP Referer header without validation to redirect users after an operation completes.

Vulnerability Details

  • Vulnerability Type: CWE-601: URL Redirection to Untrusted Site ('Open Redirect')
  • Affected Endpoints: /{resource}/delete/{pk} and /{resource}/delete
  • Affected File: fastapi_admin/routes/resources.py
  • Severity: Medium

Technical Description

The issue occurs because the application directly uses the value from the referer HTTP header as the redirect target after a delete operation:

@router.delete("/{resource}/delete/{pk}")
async def delete(request: Request, pk: str, model: Model = Depends(get_model)):
    await model.filter(pk=pk).delete()
    return RedirectResponse(url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER)

@router.delete("/{resource}/delete")
async def bulk_delete(request: Request, ids: str, model: Model = Depends(get_model)):
    await model.filter(pk__in=ids.split(",")).delete()
    return RedirectResponse(url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER)

An attacker can modify the Referer header to redirect users to a malicious site after they perform a delete operation.

Proof of Concept

I confirmed this vulnerability with the following request:

curl -i -X DELETE https://fastapi-admin-pro.long2ice.io/admin/product/delete/416 \
-H "Referer: http://192.168.43.130:5000" \
-H "Cookie: access_token=a2fdc01cd9004c9199d6287ab4d0a602"

Response:

HTTP/2 303 
date: Sat, 03 May 2025 17:53:30 GMT
location: http://192.168.43.130:5000
server: uvicorn
content-length: 0

Suggested Fix

I recommend validating the redirect URL to ensure it belongs to the same domain as the application. I've created a pull request that implements the recommended changes: #185

References

OWASP: Unvalidated Redirects and Forwards
CWE-601: URL Redirection to Untrusted Site

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions