Prototype Pollution in `hapi-error`
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- javascript
- Ambito
- security
Direzione di ricerca
Inizia dal punto di ingresso plugin.register e riproduci i tre vettori di attacco riportati nella proof of concept. Verifica che le chiavi controllate dall’utente non possano alterare Object.prototype, quindi verifica che i controlli di pollution dimostrati non abbiano più esito positivo e aggiungi la copertura per i casi riportati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Prototype Pollution in hapi-error
Summary
hapi-error (<= 3.0.0) is vulnerable to Prototype Pollution via plugin.register.
- CWE: CWE-1321 - Improperly Controlled Modification of Object Prototype Attributes
- Severity: High (CVSS 7.5)
- Weekly Downloads: 1,997
- npm: https://www.npmjs.com/package/hapi-error
Description
The function(s) plugin.register in hapi-error do not properly restrict modifications to Object.prototype. When processing user-controlled input, an attacker can inject properties via __proto__ or constructor.prototype keys, polluting the prototype of all JavaScript objects in the application.
Attack vectors: __proto__ direct, __proto__ nested, constructor.prototype
Proof of Concept
const target = require('hapi-error');
// 1. Pollute Object.prototype
const malicious = JSON.parse('{"__proto__":{"polluted":"yes"}}');
hapi-error.plugin.register({}, malicious);
// 2. Verify pollution
const obj = {};
console.log(obj.polluted); // "yes" - prototype is polluted
console.log('Vulnerable:', obj.polluted === 'yes');
Impact
Successful exploitation allows an attacker to:
- Denial of Service (DoS) by overriding critical object methods like
toStringorhasOwnProperty - Authentication Bypass via polluted authorization checks
- Remote Code Execution (RCE) when combined with gadgets (e.g.,
child_process.spawnwithshell:truepollution)
Remediation
Add key filtering to prevent prototype pollution:
function isSafe(key) {
return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';
}
Or use Object.create(null) for target objects to prevent prototype chain access.
References
- Lingua principale
- JavaScript
- Stelle
- 76
- Fork
- 12
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di dwyl/hapi-error
-
enhancement help wanted
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
dwyl/hapi-error#7 · 3 commenti ·
Tutte le issue di dwyl/hapi-error
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
schmayterling/hibi#245 ·
I maintainer di solito rispondono entro 1 giorno
-
factory-active task-identify-harness-labels-done task-identify-issue-type-done
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
vercel/ai#23304 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug package:vitest
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
cloudflare/workers-sdk#16255 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Proxy and MCP URLs with an empty authority parse as a different hostForse già presa @ericcaiwx-star l’ha presa oggi. Apertaclawsweeper:bulk-filed clawsweeper:linked-pr-open clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
openclaw/openclaw-enterprise#2384 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Access-request approve silently discards the decider's note (decision_note written only on deny)Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Uuriko/project-room#3378 ·
I maintainer di solito rispondono entro 1 giorno