
Esca HTML e JavaScript reversibili per prompt, con chiavi opache per ogni inserimento.
[!WARNING]
Questo progetto è un lavoro in corso.
SpikeStrip è pensato per fornire ispirazione a chi sviluppa difese contro strumenti di automazione basati sull'IA come ARTEX e sistemi simili. I suoi decoy e i prompt di generazione sono sperimentali.
SpikeStrip aggiunge decoy di prompt reversibili al codice sorgente HTML e ai file JavaScript. I commenti includono istruzioni che dirottano una valutazione IA, false piste di vulnerabilità e distrazioni matematiche. Possono sviare agenti che seguono i commenti nel codice o trasformare indizi non verificati in obiettivi di scansione. Uno scanner convenzionale dovrebbe estrarre i percorsi o i parametri suggeriti perché questi commenti influenzino il suo lavoro. Lo strumento non ferma in modo affidabile gli agenti che isolano i contenuti non attendibili o gli scanner che ignorano i commenti.
Ogni inserimento riceve una chiave esadecimale casuale di 12 caratteri, come a7c94e2b610f. Le chiavi vengono controllate per individuare duplicati all'interno di ogni esecuzione. I commenti distribuiti non hanno branding SpikeStrip né un prefisso canary fisso. I commenti HTML compaiono in Visualizza sorgente; i commenti JavaScript sono visibili quando qualcuno recupera lo script. I commenti non aggiungono callback, cicli eseguibili o calcoli a runtime. Tre decoy di riferimento/pausa integrati utilizzano una formulazione neutra da revisione.
Il manifest privato registra ogni commento e la sua chiave. Usalo per rimuovere commenti selezionati dopo che i numeri di riga cambiano. L'elenco originale di dieci voci rimane in src/payloads.mjs come originalPayloads e contiene esattamente 100 parole. Il pool predefinito ora ha 28 voci, incluse 18 ulteriori decoy di istruzioni e false piste di vulnerabilità. I compiti matematici originali includono problemi aperti, contraddizioni e compiti infiniti; non tutti questi sono dimostrati irrisolvibili.
Le false piste indicano route e parametri inventati per SSRF, SQL injection, server-side template injection, XSS basato su DOM, XXE, path traversal e controlli di autorizzazione sugli oggetti. Alcuni commenti affermano che un percorso dismesso utilizza un prodotto affetto da Log4Shell (CVE-2021-44228), Spring Cloud Gateway CVE-2022-22947 o Apache HTTP Server CVE-2021-41773. Gli identificatori CVE sono reali; i percorsi e le distribuzioni dichiarate sono fabbricati. Questi commenti non creano route, handler vulnerabili o richieste di rete. Verifica i nomi proposti rispetto alla tua applicazione prima di distribuirli, poiché un percorso inventato potrebbe sovrapporsi a una route reale.
SpikeStrip è disponibile sotto la MIT License, con copyright detenuto da Arcanum. Puoi usare, modificare, distribuire e vendere copie, anche in prodotti commerciali, a condizione che tu mantenga gli avvisi di copyright e di permesso nelle copie o in porzioni sostanziali del software. La licenza non richiede un riconoscimento promozionale pubblico per ogni uso commerciale.
SpikeStrip richiede Node.js 20 o versioni successive. Esegui questi comandi da questo repository.
npm install --ignore-scripts
node bin/spikestrip.mjs --help
In alternativa, usa pnpm install --frozen-lockfile --ignore-scripts con il lockfile versionato. Il pacchetto è privato e non è destinato alla pubblicazione su npm.
Esegui lo strumento sulla radice web statica compilata, dopo la minificazione e prima della distribuzione. La directory di origine e quella di output devono essere separate, senza che nessuna delle due sia contenuta nell'altra. La copia di output include gli asset ordinari e i file modificati. Lo strumento lascia intatti gli originali ed esclude i symlink, i metadati VCS, le directory delle dipendenze, le cartelle dei manifest privati e i file di ambiente.
# This preview validates inputs and writes nothing.
node bin/spikestrip.mjs inject ./site --output ./site-planted --count 20 --manifest ./private/run.json
# Apply the plan to a new copy.
node bin/spikestrip.mjs inject ./site --output ./site-planted --count 20 --manifest ./private/run.json --write
--count è il numero totale di inserimenti nell'albero. Il posizionamento, la selezione del payload e le chiavi utilizzano la casualità del sistema operativo. Le anteprime e le scritture successive possono scegliere posizioni e chiavi diverse. Ogni inserimento riceve la propria chiave anche quando il testo predefinito si ripete. Se non viene fornito alcun percorso di manifest, ne viene creato uno in .spikestrip/ accanto alla directory di output. Mantieni quella cartella privata e al di fuori del sito distribuito.
Lo strumento supporta file .html, .htm, .js, .mjs e .cjs. Utilizza i confini delle istruzioni di Acorn per posizionare i commenti JavaScript, quindi verifica che l'albero sintattico sia equivalente. I commenti HTML vengono inseriti prima dei figli diretti degli elementi espliciti head o body. Un controllo dell'albero del documento rifiuta modifiche che vadano oltre i commenti.
Lo strumento non inserisce all'interno di stringhe di attributi, testo grezzo, template, corpi di script inline o contenuto testuale. Salta e segnala frammenti privi di head/body espliciti, JavaScript non valido, file JSX/TypeScript non supportati e file sorgente superiori a 2 MB. Segnala inoltre i file sorgente supportati che non presentano posizioni di inserimento sicure. Questi file sorgente vengono copiati senza modifiche.
Usa --raw se desideri un file di testo contenente i commenti da inserire personalmente nel tuo codice sorgente web. Questa opzione non richiede una directory del sito e non inserisce nulla nei tuoi file né copia un albero di build. Offre un'alternativa quando non desideri uno strumento di inserimento nella tua pipeline di build.
# Preview an export without creating a file.
node bin/spikestrip.mjs inject --raw --output ./comments.txt --count 30
# Export JavaScript/CSS block comments, with one comment per line.
node bin/spikestrip.mjs inject --raw --output ./comments.txt --format js --count 30 --write
# Export HTML/SVG comments instead.
node bin/spikestrip.mjs inject --raw --output ./html-comments.txt --format html --count 30 --write
Ogni commento esportato ha la propria chiave casuale di 12 caratteri. Il formato predefinito è js; --format html cambia il wrapper. Scegli un formato per esportazione e inserisci i commenti solo dove quel tipo di file consente i commenti. I file di output esistenti non vengono mai sovrascritti. Le esportazioni raw accettano conteggi da 1 a 10.000 per i built-in e da 1 a 1.000 con --dynamic.
Le esportazioni raw non creano alcun manifest di rimozione perché SpikeStrip non sa dove incolli i commenti. Conserva il file di testo come inventario delle chiavi e cerca quelle chiavi per rimuovere manualmente i commenti. Il comando remove gestisce gli inserimenti automatici registrati in un manifest; non può individuare i posizionamenti manuali da un file di testo raw. Non passare una directory di origine o --manifest insieme a --raw.
Gli stessi flag di generazione funzionano con le esportazioni raw. Ad esempio, dopo aver impostato OPENAI_API_KEY, esegui node bin/spikestrip.mjs inject --raw --output ./unique-comments.txt --format js --dynamic --provider openai --model YOUR_MODEL_ID --count 40 --write. Un'anteprima continua a non effettuare alcuna richiesta API.