„Puffer ist ein dezentralisiertes natives Liquid-Restaking-Protokoll (nLRP), das auf Eigenlayer aufgebaut ist“. In nur wenigen Tagen hat es mehr als 600 Millionen US-Dollar an TVL (Total Value Locked) angezogen. Die Zugriffskontrolle ist eine wichtige Sicherheitsüberlegung, um böswillige Operationen auf dem Protokoll zu verhindern.
In diesem Blog überprüfen wir die gesamte Architektur des Zugriffskontrollmechanismus und seine aktuelle Konfiguration im Puffer-Protokoll. Dies kann der Community helfen, das Protokoll besser zu verstehen. Beachten Sie, dass das Analyseergebnis auf dem aktuellen Status (Block 19177155, 07. Feb 2024, 15:17:35 +UTC) auf Ethereum basiert.
Vertragsadressen
Die folgende Tabelle listet die in diesem Blog verwendeten Smart Contracts auf.
| Adresse | Implementierung | |
|---|---|---|
| PufferDepositor | 0x4aa799c5dfc01ee7d79 0e3bf1a7c2257ce1dceff | 0x7276925e42f9c4054af a2fad80fa79520c453d6a |
| PufferVault | 0xD9A442856C234a39a81 a089C06451EBAa4306a72 | 0x39ca0a6438b6050ea2a c909ba65920c7451305c1 |
| AccessManager | 0x8c1686069474410E624 3425f4a10177a94EBEE11 | - |
| TimeLock | 0x3c28b7c7ba1a1f55c9c e66b263b33b204f2126ea | - |
| Operation SafeWallet | 0xC0896ab1A8cae8c2C1d 27d011eb955Cca955580d | 0xd9db270c1b5e3bd161e 8c8503c55ceabee709552 |
| Community SafeWallet | 0x446d4d6b26815f9bA78 B5D454E303315D586Cb2a | 0xd9db270c1b5e3bd161e 8c8503c55ceabee709552 |
| Pausing SafeWallet | 0x1ba8e3aA853F73ae809 3E26B7B8F2520c3620Df4 | 0xd9db270c1b5e3bd161e 8c8503c55ceabee709552 |
Architektur
Das gesamte Protokoll umfasst hauptsächlich zwei Smart Contracts, die sich auf die Vermögenswerte der Benutzer beziehen. Der erste ist PufferDepositor, und der zweite ist PufferVault.

Die Hauptfunktion von PufferDepositor besteht darin, Benutzereinlagen anzunehmen und diese dann in PufferVault zu hinterlegen. Wenn die eingezahlten Vermögenswerte der Benutzer nicht stETH sind, wird der Tausch in ein DEX automatisch vom Protokoll durchgeführt.
PufferVault ist der Hauptvertrag, der die Vermögenswerte der Benutzer verwahrt. Es ist auch der Einstiegspunkt für Einlagen in EigenLayer. Die Hauptzugriffskontrolle des gesamten Protokolls ist in diesem Smart Contract implementiert.
Zugriffskontrollmechanismus
Die gesamte Zugriffskontrolle wird durch die Nutzung des OpenZeppelin AccessManager Moduls implementiert. Der AccessManager Smart Contract verwaltet die Berechtigung der PufferDepositor und PufferVault Verträge.
Der AccessManager definiert verschiedene Rollen, die verschiedene Adressen enthalten. Jeder Rolle kann die Aufrufung verschiedener Funktionen innerhalb der AccessManaged Verträge (d. h. PufferDepositor und PufferVault) zugewiesen werden. Der AccessManager unterstützt die verzögerte Ausführung einer bestimmten Funktion. Das bedeutet, dass bei der Zuweisung einer Rolle zu einer Adresse angegeben werden kann, ob die von dieser Adresse in dieser Rolle ausgegebenen Operationen sofort oder mit einer Zeitverzögerung ausgeführt werden.
Aktuelle Zugriffskonfigurationen
Dennoch hängt die Effektivität der Zugriffskontrolle von ihrer Konfiguration ab. Wir haben zahlreiche Fälle beobachtet, in denen eine fehlerhafte Konfiguration von ACL-Regeln (Access Control List) zu Sicherheitslücken geführt hat.
Um dem entgegenzuwirken, haben wir die aktuelle Konfiguration des Puffer-Protokolls überprüft und die Ergebnisse unten aufgeführt. Bitte beachten Sie, dass diese Ergebnisse nur den Status ab Block 19177155 (07. Feb 2024, 15:17:35 +UTC) widerspiegeln.
Rollen
Unten ist eine Tabelle, die die aktuellen Rollen innerhalb des Systems und ihre zugehörigen Adressen auflistet.
| Rollen-ID | Adressen mit dieser Rolle | Verzögerte Ausführung | Anmerkung |
|---|---|---|---|
| 0 | TimeLock 0x3c28b7c7ba1a1f55c9ce66b263b33b204f2126ea | Nein | ADMIN Rolle |
| 1 | Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d | Ja, mit 604800 Sekunden (7 Tage) | Zielverträge (PufferDepositor und PufferVault) upgraden |
| 1 | Community SafeWallet 0x446d4d6b26815f9ba78b5d454e303315d586cb2a | Nein | Zielverträge (PufferDepositor und PufferVault) upgraden |
| 22 | Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d | Nein | Vermögenswerte auf EigenLayer verschieben und Auszahlungsanforderung von EigenLayer initiieren |
Es gibt verschiedene Ausführungspfade, um Funktionen innerhalb des PufferVault-Vertrags auszuführen. Ein Pfad beinhaltet den TimeLock-Vertrag (mit der ADMIN-Rolle – wie in Pfad 1 in der Abbildung gezeigt), und der andere Pfad erlaubt die direkte Aufrufung von Funktionen innerhalb des Vault, wobei die Rolle dem Aufrufer zugewiesen wird. In beiden Fällen muss die Aufrufung über den AccessManager erfolgen.

Typ I: Aufrufung vom TimeLock-Vertrag
Beachten Sie, dass bei der Aufrufung einer Funktion vom TimeLock-Vertrag die zugewiesene Rolle ADMIN ist. Diese Bezeichnung ergibt sich, da aus Sicht des Vault der Aufrufer der TimeLock-Vertrag ist, der die ADMIN-Rolle besitzt. Folglich integriert der TimeLock-Vertrag eine zusätzliche Ebene des verzögerten Ausführungsmechanismus.
- Operation SafeWallet: Diese Komponente kann Funktionen im Zielvertrag nach einer Verzögerung von 604.800 Sekunden (ca. 7 Tage) aufrufen.
- Community SafeWallet: Diese Komponente kann Funktionen im Zielvertrag sofort aufrufen. Sie hat auch die Befugnis, alle ausstehenden Ausführungen in der Warteschlange des Operation SafeWallet abzubrechen.
- Pausing SafeWallet: Diese Komponente ist auf das Pausieren des Zielvertrags beschränkt und nicht berechtigt, andere Funktionen auszuführen.
Typ II: Direkte Aufrufung des Vault-Vertrags
Die folgende Methode beinhaltet die direkte Aufrufung von Funktionen innerhalb des Vault-Vertrags. Es ist wichtig zu beachten, dass der AccessManager bestimmt, welche Funktionen von den mit jeder Rolle verbundenen Adressen aufgerufen werden können.
| Rollen-ID | Zielvertrag | Ziel Funktion |
| 1 | PufferVault | upgradeToAndCall(address,bytes)
0x4f1ef286 |
| 22 | PufferVault | depositToEigenLayer (0x008e0590)
initiateETHWithdrawalsFromLido (0x593961de) initiateStETHWithdrawalFromEigenLayer (0x402064a7) |
Sowohl die Operation als auch die Community SafeWallets können die Funktion upgradeToAndCall direkt aufrufen, um den Zielvertrag zu aktualisieren. Der Hauptunterschied liegt im Timing: Die Community SafeWallet führt diese Aktion ohne Verzögerung aus, während die Operation SafeWallet einer Verzögerung unterliegt.
Darüber hinaus ist die Operation SafeWallet in der Lage, Funktionen auszuführen, die Vermögenswerte auf EigenLayer übertragen und Auszahlungsanforderungen initiieren.
Aktualisiert am [08. Feb 2024, 10:02:59 +UTC]
Eine Operation zur Entfernung der Operation SafeWallet aus Rolle 1 wurde geplant. Diese Operation soll nach Block 1707940908 ausgeführt werden, was einer geschätzten Verzögerung von etwa 7 Tagen entspricht. Die Simulation dieser in der Warteschlange befindlichen Transaktionen wurde mit BlockSec Phalcon durchgeführt.

- Die simulierte Transaktion in Phalcon Fork zur Ausführung der geplanten Ausführung am 18.02.2024 um 17:59:07 (UTC), zehn Tage später.
- Die simulierte Transaktion zur Abfrage, ob die Operation SafeWallet immer noch Rolle 1 hat (gibt false zurück)
Alle Transaktionen in diesem Fork anzeigen.
Aktualisiert am [16. Feb 2024, 20:10:23 +UTC]:
- Die Transaktion zur Entfernung der Operation SafeWallet aus Rolle 1 wurde ausgeführt. Wir können das Ergebnis von Etherscan überprüfen.

Safe Wallet-Konfigurationen
Die Konfiguration einer Safe Wallet beeinflusst auch die Sicherheit des Protokolls.
| Wallet | Eigentümer | Schwelle |
|---|---|---|
| 0xC0896ab1A8cae8c2C1d 27d011eb955Cca955580d | [0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76] [0xD6475ce37d964d4816715FdafFEeAAf2958948bE] [0xD70aa9d7280E6FEe89B86f53c0B2A363478D5e94] [0xa5F84b556d5FD8959165Eff0324DCFEa164fA089] [0xf061f1FceFa32b3bbD5d18c5A623DB64bfBc107D] [0x206846dE1F372A9a603e672ba97A5238cC89aeAA] | 3 |
| 0x446d4d6b26815f9bA78 B5D454E303315D586Cb2a | [0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76] [0x3B16821A5dBBFF86E4a88eA0621EC6be016cd79A] [0x648aA14e4424e0825A5cE739C8C68610e143FB79] [0x27c7CEd729280060577A68A54A94075D18614D19] [0xa9aE3B8FC1CBaAed74fE5889260f7cD743c50363] [0x161f479021044cB1C9e3DEF98aF945A8D972D3B2] | 3 |
| 0x1ba8e3aA853F73ae809 3E26B7B8F2520c3620Df4 | [0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76] [0x3B16821A5dBBFF86E4a88eA0621EC6be016cd79A] [0x648aA14e4424e0825A5cE739C8C68610e143FB79] [0x27c7CEd729280060577A68A54A94075D18614D19] [0xa9aE3B8FC1CBaAed74fE5889260f7cD743c50363] [0x161f479021044cB1C9e3DEF98aF945A8D972D3B2] [0xD6475ce37d964d4816715FdafFEeAAf2958948bE] [0xD70aa9d7280E6FEe89B86f53c0B2A363478D5e94] [0xa5F84b556d5FD8959165Eff0324DCFEa164fA089] [0xf061f1FceFa32b3bbD5d18c5A623DB64bfBc107D] [0x206846dE1F372A9a603e672ba97A5238cC89aeAA] [0xaACA1eDbb656206Ce2a82Da7d7BD3e1Bb8138F22] | 1 |
Aktualisiert am [08. Feb 2024, 10:02:59 +UTC]:
- Die Adresse 0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76 wurde aus der Operation SafeWallet entfernt, wodurch ihre Autorisierung auf 3/5 angepasst wird.
- Eine Transaktion zur Entfernung von 0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76 aus der Community SafeWallet wurde eingeleitet und wartet derzeit auf die Multisig-Genehmigung der Community.
- Drei Wallets wurden aus der Pausing SafeWallet entfernt, wodurch ihre Konfiguration nun auf 1/9 angepasst wird.
Zusammenfassung
In diesem Blogbeitrag haben wir die vom Puffer-Protokoll verwendeten Sicherheitsmechanismen überprüft. Insgesamt ist das Design des gesamten Berechtigungssystems umfassend.
Die Community sollte aktiv nach potenziellen Risiken Ausschau halten:
- Die Sicherheit der privaten Schlüssel der Eigentümer der Community SafeWallet ist von größter Bedeutung. Wenn drei private Schlüssel kompromittiert werden, könnte dies einem Angreifer ermöglichen, den Vault zu aktualisieren.
- Die Sicherheit abhängiger Protokolle wie EigenLayer sollte ebenfalls aktiv überwacht werden.



