Rapporto di audit del contratto intelligente per 1 pollice

Sommario di gestione

1inch ha contattato Sayfer per eseguire un audit di sicurezza sul proprio contratto intelligente.

Questo rapporto documenta la ricerca condotta da Sayfer mirata alle risorse selezionate definite nell'ambito della ricerca. In particolare, questo rapporto mostra la revisione della posizione di sicurezza per il contratto intelligente di 1 pollice. Abbiamo applicato una combinazione di strumenti di ispezione manuale e di scansione automatizzata

Durante il periodo di ricerca di 15 giorni di audit, abbiamo scoperto 3 vulnerabilità e 1 nota informativa nel contratto sottoposto a audit.
Nessuno di questi risultati è considerato critico, il contratto può essere implementato così com'è. Tutti i risultati sono stati indirizzati e corretti dal team di 1inch.

Metodologia del rischio

Noi di Sayfer ci impegniamo a fornire ai nostri clienti audit di contratti intelligenti della massima qualità. Ecco perché abbiamo implementato un modello completo di valutazione del rischio per valutare la gravità dei nostri risultati e fornire ai nostri clienti le migliori raccomandazioni possibili per la mitigazione.

Il nostro modello di valutazione del rischio si basa su due fattori chiave: IMPATTO ed PROBABILITÀ. L'impatto si riferisce al danno potenziale che potrebbe derivare da un problema, come una perdita finanziaria, un danno alla reputazione o un sistema non operativo. La probabilità si riferisce alla probabilità che si verifichi un problema, tenendo conto di fattori quali la complessità del contratto e il numero di potenziali aggressori.

Combinando questi due fattori, possiamo creare una comprensione completa del rischio posto da un particolare problema e fornire ai nostri clienti una valutazione chiara e attuabile della gravità del problema. Questo approccio ci consente di dare priorità alle nostre raccomandazioni e garantire che i nostri clienti ricevano la migliore consulenza possibile su come proteggere i loro contratti intelligenti.

Il rischio è definito come segue:

Vulnerabilità per rischio

Alta – Minaccia diretta ai processi aziendali chiave.
Medio – Minaccia indiretta ai processi aziendali chiave o minaccia parziale ai processi aziendali.
Basso – Non esiste alcuna minaccia diretta. La vulnerabilità può essere sfruttata utilizzando altre vulnerabilità.
Informativo – Questo risultato non indica vulnerabilità, ma riporta un commento che segnala difetti di progettazione e implementazione impropria che potrebbero causare problemi a lungo termine.

Gravità
# di problemi
Alta
0
Medio
2
Basso
1
Informativo
1
critico
0

Approccio

Introduzione

1inch ha contattato Sayfer per eseguire un audit di sicurezza sul proprio contratto intelligente.

Questo rapporto documenta la ricerca condotta da Sayfer mirata alle risorse selezionate definite nell'ambito della ricerca. In particolare, questo rapporto mostra la revisione del livello di sicurezza per i contratti sopra menzionati.

Panoramica dell'ambito

Insieme al team di 1inch abbiamo definito il seguente contratto come ambito del progetto. Hash di commit: 81e1f5190c391fbb929aa74a67d43245f3f662dc

Contratto Sha-256
DecompressorExtension.sol bc852b286a487711699128f1124beb69a37a75658730486ce681b5cef1e5ba11

I nostri test sono stati eseguiti tra maggio e giugno 2023.

Non lasciare che sia troppo tardi!

Inizia la tua verifica con Sayfer

Convalida dell'ambito

Abbiamo iniziato assicurandoci che l'ambito definito dal cliente fosse tecnicamente logico. Decidere quale ambito è corretto per un dato sistema fa parte della discussione iniziale.

Modello di minaccia

Abbiamo definito che la più grande minaccia attuale per il sistema è la capacità di un attore malintenzionato di causare DoS o creare comportamenti imprevisti nell'algoritmo di compressione

Non lasciare che sia troppo tardi!

Inizia la tua verifica con Sayfer

Panoramica del protocollo

1 pollice che migliora l'efficienza delle operazioni all'interno dell'ambiente blockchain Layer 2. Dato che le operazioni con dati di chiamata più grandi tendono ad essere più costose nel Livello 2, l’obiettivo centrale è ridurre la dimensione dei dati di chiamata. Per raggiungere questo obiettivo, viene utilizzata una strategia di compressione dei dati di chiamata, questa strategia coinvolge principalmente operazioni fuori catena e utilizza un meccanismo denominato DecompressorExtension, che consente il recupero dei dati di chiamata compressi.

Per la compressione dei dati delle chiamate vengono utilizzate diverse tecniche chiave:

  1. Compressione di byte zero consecutivi: questa tecnica riduce la dimensione complessiva dei dati di chiamata consolidando byte zero sequenziali in un formato più compatto.
  2. Copia di byte consecutivi: in alcuni casi, la replica di byte sequenziali viene utilizzata come strategia di compressione dei dati.
  3. Sostituzione basata su dizionario: vengono utilizzati due metodi distinti per sostituire un segmento dei dati di chiamata con un indice tratto da un dizionario predefinito, portando a una rappresentazione dei dati più efficiente.

Valutazione della sicurezza

I seguenti casi di test sono stati la linea guida durante l'audit del sistema. Questa lista di controllo è una versione modificata del SCSVS v1.2, con grammatica, chiarezza, concisione e criteri aggiuntivi migliorati. Dove c'è una lacuna nella numerazione è stato eliminato un criterio originario. I criteri contrassegnati da un asterisco sono stati aggiunti da noi.

Architettura, design e modellazione delle minacce

Architettura, design e modellazione delle minacce Nome del test
G1.2 Ogni modifica di progettazione introdotta è preceduta dalla modellazione delle minacce.
G1.3 La documentazione definisce in modo chiaro e preciso tutti i limiti di fiducia nel contratto (relazioni di fiducia con altri contratti e flussi di dati significativi).
G1.4 Il SCSVS, i requisiti di sicurezza o la politica è disponibile per tutti gli sviluppatori e i tester.
G1.5 Gli eventi per le operazioni (cambiamento di stato/cruciali per il business) sono definiti.
G1.6 Il progetto include un meccanismo in grado di interrompere temporaneamente le funzionalità sensibili in caso di attacco. Questo meccanismo non dovrebbe bloccare l'accesso degli utenti alle loro risorse (ad esempio token).
G1.7 La quantità di criptovalute inutilizzate conservate sul contratto è controllata e al livello minimo accettabile in modo da non diventare un potenziale bersaglio di un attacco.
G1.8 Se la funzione di fallback può essere richiamata da chiunque, è inclusa nel modello di minaccia.
G1.9 La logica aziendale è coerente. Importanti cambiamenti nella logica dovrebbero essere applicati a tutti i contratti.
G1.10 Per rilevare le vulnerabilità vengono utilizzati strumenti di analisi automatica del codice.
G1.11 Viene utilizzata l'ultima major release di Solidity.
G1.12 Quando si utilizza un'implementazione esterna di un contratto, viene utilizzata la versione più recente.
G1.13 Quando le funzioni vengono sovrascritte per estendere la funzionalità, la parola chiave super viene utilizzata per mantenere la funzionalità precedente.
G1.14 L'ordine di eredità è accuratamente specificato.
G1.15 È presente un componente che monitora l'attività del contratto utilizzando gli eventi.
G1.16 Il modello di minaccia include transazioni di balene.
G1.17 La perdita di una chiave privata non compromette la sicurezza dell'intero progetto.

Politiche e procedure

Politiche e procedure Nome del test
G2.2 La sicurezza del sistema è costantemente monitorata (es. il livello previsto di fondi).
G2.3 Esiste una politica per tenere traccia delle nuove vulnerabilità di sicurezza e per aggiornare le librerie all'ultima versione sicura.
G2.4 Il dipartimento di sicurezza può essere contattato pubblicamente e che la procedura per la gestione dei bug segnalati (ad es. bug bounty completa) sia ben definita.
G2.5 Il processo di aggiunta di nuovi componenti al sistema è ben definito.
G2.6 Il processo delle principali modifiche al sistema prevede la modellazione delle minacce da parte di un'azienda esterna.
G2.7 Il processo di aggiunta e aggiornamento dei componenti al sistema include un controllo di sicurezza da parte di un'azienda esterna.
G2.8 In caso di hack, è in atto una procedura di mitigazione chiara e ben nota.
G2.9 La procedura in caso di hack definisce chiaramente quali persone devono eseguire le azioni richieste.
G2.10 La procedura include allarmare altri progetti sull'hacking attraverso canali attendibili.
G2.11 Viene definita una procedura di mitigazione della perdita di chiave privata.

Aggiornabilità

Aggiornabilità Nome del test
G3.2 Prima dell'aggiornamento, viene effettuata un'emulazione in un fork della rete principale e tutto funziona come previsto sulla copia locale.
G3.3 Il processo di aggiornamento viene eseguito da un contratto multisig in cui più di una persona deve approvare l'operazione.
G3.4 I timelock vengono utilizzati per operazioni importanti in modo che gli utenti abbiano il tempo di osservare i cambiamenti imminenti (si prega di notare che la rimozione di potenziali vulnerabilità in questo caso potrebbe essere più difficile).
G3.5 inizializzare() può essere chiamato una sola volta.
G3.6 inizializzare() può essere chiamato solo da un ruolo autorizzato tramite opportuni modificatori (es inizializzatore, onlyOwner).
G3.7 Il processo di aggiornamento viene eseguito in un'unica transazione in modo che nessuno possa eseguirlo in anticipo.
G3.8 I contratti aggiornabili hanno spazi riservati sugli slot per impedire la sovrascrittura.
G3.9 Il numero di slot riservati (come intervallo) è stato ridotto in modo appropriato se sono state aggiunte nuove variabili.
G3.10 Non ci sono cambiamenti nell'ordine in cui vengono dichiarate le variabili di stato del contratto, né i loro tipi.
G3.11 I nuovi valori restituiti dalle funzioni sono gli stessi delle versioni precedenti del contratto (es proprietario(), saldoDi(indirizzo)).
G3.12 L'implementazione viene inizializzata.
G3.13 L'implementazione non può essere distrutta.

 

Logica di business

Logica di business Nome del test
G4.2 La logica del contratto e l'implementazione dei parametri del protocollo corrispondono alla documentazione.
G4.3 La business logic procede in un ordine sequenziale e non è possibile saltare i passaggi o eseguirli in un ordine diverso da quello progettato.
G4.4 Il contratto ha correttamente rispettato i limiti di business.
G4.5 La logica di business non si basa sui valori recuperati da contratti non attendibili (soprattutto quando sono presenti più chiamate allo stesso contratto in un singolo flusso).
G4.6 La logica aziendale non si basa sull'equilibrio del contratto (ad esempio, saldo == 0).
G4.7 Le operazioni sensibili non dipendono dai dati del blocco (ad es. blocco hash, timestamp).
G4.8 Il contratto utilizza meccanismi che mitigano gli attacchi di ordine delle transazioni (front-running) (ad esempio schemi di pre-commit).
G4.9 Il contratto non invia fondi automaticamente, ma consente agli utenti di prelevare fondi in transazioni separate.

Access Control

Access Control Nome del test
G5.2 Il principio del minimo privilegio è rispettato. Altri contratti dovrebbero poter accedere solo a funzioni e dati per i quali sono in possesso di specifica autorizzazione.
G5.3 I nuovi contratti con accesso al contratto verificato aderiscono automaticamente al principio dei diritti minimi. I contratti devono disporre di autorizzazioni minime o nulle fino a quando l'accesso alle nuove funzionalità non viene concesso in modo esplicito.
G5.4 Il creatore del contratto rispetta il principio del minimo privilegio ei suoi diritti seguono rigorosamente quelli delineati nella documentazione.
G5.5 Il contratto applica le regole di controllo degli accessi specificate in un contratto attendibile, in particolare se il controllo degli accessi lato client dApp è presente e potrebbe essere aggirato.
G5.6 Le chiamate a contratti esterni sono consentite solo se necessario.
G5.7 Il codice modificatore è chiaro e semplice. La logica non deve contenere chiamate esterne a contratti non attendibili.
G5.8 Tutti gli attributi degli utenti e dei dati utilizzati dai controlli di accesso sono conservati in contratti attendibili e non possono essere manipolati da altri contratti se non specificamente autorizzati.
G5.9 I controlli di accesso falliscono in modo sicuro, anche quando si verifica un ripristino.
G5.10 Se l'input (parametri della funzione) viene convalidato, ove possibile viene utilizzato l'approccio di convalida positiva (whitelisting).

Comunicazione

Comunicazione Nome del test
G6.2 Vengono identificate le librerie che non fanno parte dell'applicazione (ma su cui si basa il contratto intelligente per funzionare).
G6.3 La chiamata delegata non viene utilizzata con contratti non attendibili.
G6.4 I contratti di terze parti non nascondono funzioni speciali (ad es. Revert).
G6.5 Il contratto non controlla se l'indirizzo è un contratto che utilizza il codice operativo extcodesize.
G6.6 Gli attacchi di rientro vengono mitigati bloccando le chiamate ricorsive da altri contratti e seguendo il modello Check-Effects-Interactions. Non utilizzare la funzione di invio a meno che non sia indispensabile.
G6.7 Il risultato di chiamate di funzioni di basso livello (ad es invia, delegachiama, chiama) da altri contratti è controllato.
G6.8 Il contratto si basa sui dati forniti dal mittente corretto e non si basa sul valore tx.origin.

Aritmetica

Aritmetica Nome del test
G7.2 I valori e le operazioni matematiche sono resistenti agli overflow di numeri interi. Utilizza la libreria SafeMath per le operazioni aritmetiche prima della solidità 0.8.*.
G7.3 I frammenti di codice non controllati da Solidity ≥ 0.8.* non introducono under/overflow di numeri interi.
G7.4 I valori estremi (es. valori massimi e minimi del tipo di variabile) sono considerati e non modificano il flusso logico del contratto
G7.5 La disuguaglianza non rigorosa viene utilizzata per l'uguaglianza di equilibrio.
G7.6 Nei calcoli vengono utilizzati gli ordini di grandezza corretti.
G7.7 Nei calcoli, la moltiplicazione viene eseguita prima della divisione per la precisione.
G7.8 Il contratto non presuppone la precisione a virgola fissa e utilizza un moltiplicatore o memorizza sia il numeratore che il denominatore.

Denial of Service

Denial of Service Nome del test
G8.2 Il contratto non esegue iterazioni su cicli non associati.
G8.3 La funzionalità di autodistruzione viene utilizzata solo se necessario. Se è incluso nel contratto, dovrebbe essere chiaramente descritto nella documentazione.
G8.4 La business logic non è bloccata se un attore (es. contratto, account, oracolo) è assente.
G8.5 La logica aziendale non disincentiva gli utenti a utilizzare i contratti (ad esempio, il costo della transazione è superiore al profitto).
G8.6 Le espressioni di funzioni assert o require hanno una variante passante.
G8.7 Se la funzione di fallback non è richiamabile da nessuno, non sta bloccando le funzionalità del contratto.
G8.8 Non ci sono operazioni costose in un ciclo.
G8.9 Non ci sono chiamate a contratti non attendibili in un ciclo.
G8.10 Se esiste la possibilità di sospendere l'esecuzione del contratto, è anche possibile riprenderlo.
G8.11 Se vengono utilizzate whitelist e blacklist, non interferiscono con il normale funzionamento del sistema.
G8.12 Non ci sono DoS causati da overflow e underflow.

Dati Blockchain

Dati Blockchain Nome del test
G9.2 Qualsiasi dato salvato nei contratti non è considerato sicuro o privato (anche variabili private).
G9.3 Nessun dato riservato viene memorizzato nella blockchain (password, dati personali, token ecc.).
G9.4 I contratti non utilizzano valori letterali stringa come chiavi per i mapping. Le costanti globali vengono utilizzate invece per prevenire l'attacco Homoglyph.
G9.5 Il contratto non genera banalmente numeri pseudocasuali basati sulle informazioni dalla blockchain (ad esempio seeding con il numero del blocco).

Utilizzo e limitazioni del gas

Utilizzo e limitazioni del gas Nome del test
G10.1 L'utilizzo del gas è previsto, definito e ha limiti chiari che non possono essere superati. Sia la struttura del codice che l'input dannoso non dovrebbero causare l'esaurimento del gas.
G10.2 L'esecuzione e la funzionalità della funzione non dipendono dalle tariffe del gas codificate (sono destinate a variare).

Chiarezza e leggibilità

Chiarezza e leggibilità Nome del test
G11.2 La logica è chiara e modularizzata in molteplici semplici contratti e funzioni.
G11.3 Ogni contratto ha un breve commento di 1-2 frasi che ne spiega lo scopo e la funzionalità.
G11.4 Vengono utilizzate implementazioni standard, questo è chiarito nel commento. Se queste implementazioni sono state modificate, le modifiche sono annotate in tutto il contratto.
G11.5 L'ordine di ereditarietà viene preso in considerazione nei contratti che utilizzano più funzioni di ereditarietà e shadow.
G11.6 Ove possibile, i contratti utilizzano codice testato esistente (ad esempio contratti token o meccanismi come possedibile) invece di implementarne uno proprio.
G11.7 Modelli di denominazione coerenti vengono seguiti durante tutto il progetto.
G11.8 Le variabili hanno nomi distintivi.
G11.9 Tutte le variabili di archiviazione vengono inizializzate.
G11.10 Le funzioni con il tipo restituito specificato restituiscono un valore di quel tipo.
G11.11 Vengono utilizzate tutte le funzioni e le variabili.
G11.12 richiedere è usato al posto di ritornare in if dichiarazioni.
G11.13 I affermare La funzione viene utilizzata per verificare la presenza di errori interni e il file richiedere La funzione viene utilizzata per garantire una condizione valida in ingresso da utenti e contratti esterni.
G11.14 Il codice assembly viene utilizzato solo se necessario.

Copertura del test

Copertura del test Nome del test
G12.2 Le narrazioni sugli abusi dettagliate nel modello di minaccia sono coperte da unit test
G12.3 Le funzioni sensibili nei contratti verificati sono coperte con test in fase di sviluppo.
G12.4 L'implementazione dei contratti verificati è stata verificata per le vulnerabilità della sicurezza utilizzando sia l'analisi statica che quella dinamica.
G12.5 Le specifiche del contratto sono state formalmente verificate
G12.6 La specifica ei risultati della verifica formale sono inclusi nella documentazione.

Finanza decentralizzata

Finanza decentralizzata Nome del test
G13.1 Il contratto del prestatore non presuppone che il suo saldo (utilizzato per confermare il rimborso del prestito) venga modificato solo con le proprie funzioni.
G13.2 Le funzioni che modificano il saldo dei prestatori e/o prestano criptovaluta non sono rientranti se lo smart contract consente di prendere in prestito la criptovaluta della piattaforma principale (ad es. Ethereum). Blocca gli attacchi che aggiornano il saldo del mutuatario durante l'esecuzione del prestito flash.
G13.3 Le funzioni di prestito flash possono chiamare solo funzioni predefinite sul contratto ricevente. Se possibile, definire un sottoinsieme attendibile di contratti da richiamare. Di solito, il contratto di invio (prestito) è quello da richiamare.
G13.4 Se include operazioni potenzialmente pericolose (ad es. restituzione di più ETH/token di quelli presi in prestito), la funzione del destinatario che gestisce ETH o token presi in prestito può essere richiamata solo dal pool e all'interno di un processo avviato dal proprietario del contratto ricevente o da un'altra fonte attendibile (ad es. multiseg).
G13.5 I calcoli della quota del pool di liquidità vengono eseguiti con la massima precisione possibile (ad esempio, se il contributo è calcolato per ETH dovrebbe essere fatto con una precisione di 18 cifre – per Wei, non Ether). Il dividendo va moltiplicato per 10 alla potenza del numero di cifre decimali (es. dividendo * 10^18 / divisore).
G13.6 I premi non possono essere calcolati e distribuiti all'interno della stessa chiamata di funzione che deposita i token (dovrebbe essere definita anche come non rientrante). Questo protegge dalle fluttuazioni momentanee delle azioni.
G13.7 I contratti di governance sono protetti dagli attacchi di prestiti flash. Una possibile tecnica di mitigazione è richiedere il processo di deposito dei token di governance e proporre una modifica da eseguire in transazioni diverse incluse in blocchi diversi.
G13.8 Quando si utilizzano oracoli su catena, i contratti sono in grado di sospendere le operazioni in base al risultato degli oracoli (in caso di oracolo compromesso).
G13.9 I contratti esterni (anche fidati) che sono autorizzati a modificare gli attributi di un contratto di progetto (es. prezzo del token) hanno le seguenti limitazioni implementate: soglie per la modifica (es. non più/meno del 5%) e un limite di aggiornamenti (es. un aggiornamento al giorno).
G13.10 Gli attributi del contratto che possono essere aggiornati dai contratti esterni (anche fidati) vengono monitorati (ad es. utilizzando gli eventi) e viene implementata una procedura di risposta agli incidenti (ad es. durante un attacco in corso).
G13.11 Operazioni matematiche complesse che consistono in operazioni sia di moltiplicazione che di divisione eseguono prima le moltiplicazioni e poi le divisioni.
G13.12 Quando si calcolano i prezzi di scambio (ad es. da ETH a token o viceversa), il numeratore e il denominatore vengono moltiplicati per le riserve (vedere il getInputPrice funzione nel ScambioUniswap contrarre).

 

Controllo dell'ordine da Sayfer





    Questo sito è protetto da reCAPTCHA e Google Informativa sulla Privacy ed Termini di Servizio applicare.

    Risultati dell'audit

    Rischio di centralizzazione

    ID DIRE-01
    Stato dei servizi Fissa
    Rischio Medio
    Dove DecompressorExtension.sol
    Strumenti Test manuale

    Descrizione

    Se l' _setData la funzione è esposta al proprietario del contratto, che sembra essere il modo previsto di utilizzare il contratto secondo il README, questo introduce un rischio di centralizzazione per ogni progetto che utilizza DecompressorExtension.

    function _setData(uint256 offset, bytes32 data) internal
    validDictAccess(offset) {
        unchecked {
            _dict[offset] = data;
        }
    }

    Un proprietario può eseguire front-run una chiamata da un utente e modificare il tasto dict corrispondente prima che la chiamata venga eseguita, il che gli consente di modificare arbitrariamente i dati della chiamata. Pertanto, diventa impossibile per un utente verificare i dati della chiamata (decompressi) prima di una chiamata.

    La mutabilità delle voci dei dict significa anche che altri contratti intelligenti che chiamano decompress non possono memorizzare immutabili i dati di chiamata compressi, poiché la sua interpretazione potrebbe cambiare.

    Mitigazione

    Una soluzione a questo problema potrebbe essere quella di non consentire la modifica delle voci del dizionario esistenti, ma è necessaria una migliore comprensione delle esigenze e delle opzioni aziendali.

     

    Nessuna implementazione di proprietà

    ID DIRE-02
    Stato dei servizi Fissa
    Rischio Medio
    Dove DecompressorExtension.sol
    Strumenti Test manuale

    Descrizione

    Il README afferma più volte sull'implementazione Modulo possedibile OpenZeppelin. In realtà, il contratto non implementa né estende Owneable, il che potrebbe creare confusione e fuorviante per i proprietari del progetto.

    Dal README:

    This contract provides a `DecompressorExtension` abstract
    contract that extends `Ownable` from the OpenZeppelin
    library.

    Ciò è pericoloso in quanto i proprietari del progetto potrebbero presumere che esista un meccanismo di controllo degli accessi, che non esiste.

    Mitigazione

    Implementa la funzionalità di proprietà ereditando da Ownable o aggiorna il file README per dichiarare che l'utente è colui che dovrebbe occuparsi del controllo degli accessi

     

    Attacco DoS con gas

    ID DIRE-03
    Stato dei servizi Fissa
    Rischio Basso
    Dove DecompressorExtension.sol
    Strumenti Test manuale

    Descrizione

    È molto semplice inviare input (brevi). decompress ciò si traduce in enormi dati di chiamata decompressi, cioè l'equivalente di a bomba zip.

    Ad esempio, è possibile inviare molti 00111111 byte seguiti da altri dati utilizzando case 0, con conseguenti enormi costi di espansione della memoria:

    case 0 {
        let size := add(byte(0, data), 1)
        calldatacopy(outptr, calldatasize(), size)
        inptr := add(inptr, 1)
        outptr := add(outptr, size)
        continue
    }

    Se l'utente effettua personalmente questa transazione, questo non è un problema, poiché spreca solo i propri fondi, da qui il basso rischio dato a questa scoperta.

    Tuttavia, esistono alcuni scenari in cui ciò potrebbe consentire un attacco. Ad esempio, potremmo avere un contratto di relè che richiama un contratto intelligente in cui gli sviluppatori si prendono cura che l'utilizzo del gas di ogni funzione sia limitato. Se questo contratto intelligente ora inizia a utilizzare l'estensione, l'utilizzo del gas diventa illimitato, poiché il data la variabile è un input controllato dall'utente.

    Mitigazione

    Evitare questa vulnerabilità sarà difficile, è necessario comprendere meglio le esigenze aziendali.

    Una soluzione è introdurre un limite di lunghezza opzionale per i dati delle chiamate decompressi, sebbene ciò potrebbe essere difficile/impossibile da impostare a seconda delle funzioni.
    Oltre a questa soluzione tecnica, riteniamo che questa dovrebbe essere almeno documentata nel README o in un commento in linea.

     

    Incompatibilità con transazioni ERC-2771/meta

    ID DIRE-04
    Stato dei servizi Fissa
    Rischio Informativo
    Dove DecompressorExtension.sol
    Strumenti Test manuale

    Descrizione

    L'estensione è incompatibile con lo standard ERC-2771 in cui il ripetitore aggiunge il mittente originale ai dati della chiamata (poiché ciò comporterebbe errori di compressione).

    Questo non dovrebbe essere un grosso problema poiché i contratti supportano ancora le chiamate normali (non compresse), ma significa che la compressione non può essere utilizzata insieme alle meta transazioni.

    La nostra ipotesi è che a un certo punto questo contratto diventerà un elemento fondamentale per altri protocolli, che questi protocolli potrebbero utilizzare ERC-2771, che quindi non funzionerebbe più quando si utilizzano dati di chiamata compressi.

    Mitigazione

    Se questo è rilevante, implementa ERC-2771

    Contattaci

    Rimaniamo in contatto

    Dove
    Tel Aviv, Israele
    messaggeri:
    Non esitate a contattarci, saremo lieti di rispondere!





      Questo sito è protetto da reCAPTCHA e Google Informativa sulla Privacy ed Termini di Servizio applicare.
      Salta al contenuto