Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-104356-pictshare-weak-delete-code — Eliminazione prevedibile di delete_code tramite rand() in PictShare < 3.7.1 (CWE-338). PoC + analisi dell'advisory. | Kitploit
Strumenti/GitHubGitHub/wvllxe/cve-2026-104356-pictshare-weak-delete-code
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebCrittografiaPaper e RicercaApprendimento e Formazione
GitHubwvllxe/cve-2026-104356-pictshare-weak-delete-code

CVE-2026-104356-pictshare-weak-delete-code

Eliminazione prevedibile di delete_code tramite rand() in PictShare < 3.7.1 (CWE-338). PoC + analisi dell'advisory.

Vedi Repository
251 giorno 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-104356 — delete_code prevedibile tramite rand() in PictShare

Ricerca di sicurezza autorizzata. PoC solo per uso difensivo ed educativo.

CVSS 3.1 CVSS 4.0 CWE-338 Status

PictShare genera il token di autorizzazione delete_code con getRandomString(), che preleva ogni carattere dal rand() non crittografico di PHP. Poiché rand() non è un CSPRNG — e lo stesso generatore produce l'hash pubblico del file mostrato in ogni URL condiviso — il delete_code è prevedibile anziché segreto, consentendo la cancellazione non autorizzata dei file ospitati senza mai leggere il codice dall'endpoint info.

CVECVE-2026-104356
ProdottoPictShare (host di immagini/media self-hosted)
Affetto>= 2.0.0, < 3.7.1
Corretto inv3.7.1
VulnerabilitàUso di PRNG crittograficamente debole (CWE-338) → token di autorizzazione prevedibile
PrivilegiNessuno (non autenticato)
CVSS 3.15.9 MEDIUM — AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS 4.08.2 HIGH — AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H
Scoperto daAlisher Qarshibayev
AdvisoryVulnCheck

Causa principale

// src/inc/core.php  (< 3.7.1)
function getRandomString($length=32, $keyspace='0123456789abcdefghijklmnopqrstuvwxyz')
{
    $str = '';
    $max = (function_exists('mb_strlen') ? mb_strlen($keyspace,'8bit') : strlen($keyspace)) - 1;
    for ($i = 0; $i < $length; ++$i) {
        $str .= $keyspace[rand(0, $max)];   // <-- rand() is NOT cryptographically secure
    }
    return $str;
}

Questa singola funzione produce entrambi:

  • l'hash del file che è pubblico in ogni URL di immagine condivisa, e
  • il delete_code che autorizza la cancellazione.

Poiché entrambi i token provengono dallo stesso flusso non-CSPRNG, un attaccante che osserva l'hash pubblico ottiene informazioni sullo stato del generatore — il delete_code non ha più l'entropia che la sua lunghezza di 32 caratteri suggerisce. rand() non offre alcuna garanzia di imprevedibilità crittografica, quindi usarlo per un token di sicurezza è il difetto (CWE-338), indipendentemente da qualsiasi specifica tecnica di recupero dello stato.

Perché è sfruttabile, detto onestamente

  • Il difetto principale è reale e confermato dal vendor: un token che autorizza la sicurezza deve provenire da un CSPRNG. Il commit di correzione del maintainer stesso dice "rand(), il cui stato può essere recuperato dagli hash pubblici dei file prelevati dallo stesso generatore" e passa a random_int().
  • Il recupero completo dello stato remoto dipende dall'ambiente. PHP 7+ auto-inizializza rand() (alias del percorso Mersenne-Twister) per processo, quindi un predittore remoto pronto all'uso dipende dal deployment (riutilizzo del processo, numero di output osservabili, build di PHP). Questo PoC pertanto dimostra il principio di prevedibilità in modo deterministico in un seed controllato, anziché rivendicare una compromissione remota universale in un colpo solo. Questo è l'ambito onesto della scoperta — ed è esattamente il motivo per cui il vendor l'ha comunque trattata come una vulnerabilità e l'ha corretta.

Proof of Concept

demo.php riproduce l'esatta getRandomString() del vendor e mostra che, una volta noto/recuperato lo stato del PRNG, il primo output (l'hash pubblico) determina completamente il secondo output (il delete_code) — cioè osservando l'hash si predice il codice:

php demo.php

Output atteso:

[*] Reproducing PictShare getRandomString() with rand()
[*] Seed used by victim process : 1337  (unknown to attacker a priori)
    public file hash  (output #1): k3f9... (visible in the shared URL)
    secret delete_code(output #2): 8a1c...

[*] Attacker recovers seed by matching the OBSERVED public hash:
[+] Seed recovered: 1337
[+] Predicted delete_code: 8a1c...
[+] MATCH — delete_code predicted from the public hash alone (no info API needed)

Vedi demo.php. È autonomo (nessun server, nessuna rete) e dimostra il determinismo hash→codice che rende rand() inadatto in questo caso.

Impatto

  • Cancellazione non autorizzata dei file ospitati predicendo il token di autorizzazione dai dati che l'applicazione già espone pubblicamente → perdita di disponibilità/integrità.
  • Si concatena con (o sostituisce) CVE-2026-104051: quel bug divulga direttamente il codice; questo mostra che il codice non è mai stato non-indovinabile fin dall'inizio.

Remediation

Aggiornare a PictShare 3.7.1 (commit di correzione ce5fc47), che sostituisce rand() con random_int() (CSPRNG). Indicazione generale: generare ogni token di sicurezza (codici di cancellazione, token di reset, chiavi API, salt) con un RNG crittograficamente sicuro — random_int() / random_bytes() in PHP — mai rand(), mt_rand() o uniqid().

Nota: i codici di cancellazione emessi prima della correzione non vengono ruotati, quindi gli upload precedenti alla correzione rimangono prevedibili fino al nuovo upload.

Timeline

DataEvento
2026-10-01Divulgazione pubblica, CVE riservato e pubblicato (VulnCheck), corretto in v3.7.1

Divulgazione

Divulgato responsabilmente al vendor e coordinato tramite VulnCheck. Corretto prima del rilascio di questo PoC. Pubblicato per scopi difensivi ed educativi.

Scarica lo strumento