Il 23 aprile 2026Un aggressore è riuscito a trovare e sfruttare un bug in uno dei contratti intelligenti di Aktionariat. il contratto Brokerbot. che, sotto alcune condizioni, ha permesso di drenare efficacemente la riserva di stablecoin di un Brokerbot.
Quattro emittenti con Brokerbot sono state interessate configurazioni contrattuali corrispondenti a tali condizioni. In totale, il tasso di crescita del PIL in termini reali. CHF 31'606 L'aggressore ha rubato la versione in forma di Frankencoin (ZCHF).
Aktionariat ha rimborsato tutte le perdite subite dai quattro emittenti interessati. Il bug è stato patchato e nuovo PaymentHub e Brokerbot i contratti sono stati stipulati con tutti gli emittenti. La configurazione che ha permesso l'attacco è stata disabilitata anche per tutti gli emittenti.
Sebbene le operazioni dannose siano state coinvolte nell'interazione con il mercato primario per acquistare e rivendere gli emittenti." azioni tokenizzateNon sono state rubate azioni. I registri di proprietà e di azionisti restano quindi intatti.
Non sono stati interessati investitori o azionisti.
Fatti
| Data di utilizzo | 23.04.2026 |
| Gli emittenti hanno avuto un impatto | 4 |
| Importo rubato | CHF 31'606 |
| Stato | Risolto. Gli emittenti hanno rimborsato completamente e il bug è stato patchato. |
Che cosa è successo
Il bug è stato causato da un calcolo difettoso in uno dei contratti intelligenti di Aktionariat che, in circostanze specifiche e con transazioni appositamente costruite, lasciava all'acquirente ricevere una quota in più di quella che avrebbe dovuto ricevere in base al prezzo pagato. Questo era possibile solo in configurazioni con un incremento positivo dei prezzi, dove il prezzo delle azioni aumenta monotonicamente ad ogni acquisto.
Per raggiungere queste condizioni, un aggressore ha dovuto trovare aziende dove:
- sono stati abilitati i riacquisti nel mercato primario,
- è stato fissato un incremento dei prezzi non zero, e i prezzi; i prezzi di mercato e di mercato. i prezzi di mercato. i prezzi di mercato. i
- c'era almeno un certo equilibrio ZCHF sulla Brokerbot contratto.
L'attaccante ha poi sfruttato il bug looping sopra lo stesso calcolo difettoso più volte in una singola transazione. In ogni iterazione, l'aggressore:
- ha acquistato azioni con un importo molto specifico, ricevendo così una quota in più rispetto a quella pagata; e;; il valore di mercato del capitale investito. il valore di capitale di classe
- ha venduto indietro tutte le azioni, compreso quello extra, quindi necessita il prezzo di una quota in ZCHF. il prezzo di una quota in ZCHF. il prezzo di una quota in ZCHF. il prezzo di una quota in ZCHF. il prezzo di una quota in ZCHF. il prezzo di una quota in ZCHF. il prezzo di una quota
Il ciclo è continuato fino all'intera riserva ZCHF della Brokerbot Il contratto e' stato prosciugato. Al termine della transazione, la ZCHF rubata è stata immediatamente convertita in ETH e trasferita via. I bot MEV sono stati usati per offuscare l'aggressore ed evitare i pool di transazioni pubbliche.
Alla scoperta dell'insetto,i. Aktionariat, in parallelo:
- ha individuato la causa principale, i presupposti e quali emittenti sono stati o potrebbero essere interessati;;
- ha calcolato l’impatto e deciso che Aktionariat avrebbe coperto integralmente tutte le perdite;
- ha iniziato ad implementare e a stendere una patch e una configurazione che rimuove il bug e rende impossibile la configurazione difettosa; e
- ha iniziato a pianificare la comunicazione diretta ai clienti interessati.
Causa della radice tecnica
Il calcolo errato è in getShares, una funzione che calcola il numero di azioni da ricevere per un determinato importo ZCHF:
funzione getShares(ointe256) pubblico visualizzare i rendimenti (ointe256) {
uint256 currentPrezzo = getPrice(); uint256 min = 0; uint256 max = money / currentPrice; while (min < max){
uint256 middle = (min + max)/2;
uint256 totalPrice = getPrice(currentPrice, middle); if (money > totalPrice){
min = medio + 1;
} altrimenti {
max = mezzo;;
}
}
numero di riferimento;;;
} Le parti problematiche sono evidenziate sopra. Ma soprattutto, se il dato denaro è superiore al calcolato Prezzo totale, il ciclo esce con min = medio + 1, anche se il pagamento extra potrebbe essere molto inferiore al prezzo di una quota completa. Nota che questo percorso è usato solo quando è impostato un incremento di prezzo.
Il contratto di PaymentHub che innescava il commercio non stava anche controllando il risultato restituito. per esempio semplicemente facendo rispettare che getBuyPrice(importo azioni) < totale pagato , che avrebbe impedito lo sfruttamento del calcolo difettoso.
Rimedio
- Aktionariat rilevato gli importi rubati dalla Brokerbot contratti e rimborsi completi agli emittenti interessati. Di conseguenza, nessun emittente ha perso denaro.
- Un aggiornamento Brokerbot contratto è stato sviluppato e distribuito che corregge il bug di calcolo.
- È stata sviluppata e distribuita una versione aggiornata del contratto PaymentHub, adottata dagli emittenti tramite proposte multifirma. Il nuovo contratto verifica la correttezza dei pagamenti e blocca gli errori di una unità (off-by-one).
- I buyback erano disabilitati per i Brokerbot a rischio. Si noti che, senza l'aggiornamento di PaymentHub, disabiling buyback da solo permetterebbe ancora un attaccante per ottenere una quota in più rispetto a quanto previsto. Tuttavia, gli attaccanti a catena non sono per lo più interessati a rubare azioni o a detenere token; eseguono solo transazioni il cui ricavato può essere liquidato immediatamente, quindi disabilitando i buyback blocca efficacemente l'attaccante.
- Nuovi contratti di investimento diretto Aktionariat non hanno la funzione di acquisto, quindi l'intero problematico (ma ora fisso) blocco è già irrilevante ed è stato rimosso.
Lezioni di laurea
La più grande sorpresa e lezione per noi è stata quella di trovare un bug con impatto critico nei contratti che hanno superato controlli di sicurezza e audit formali più volte. Questo bug era in atto da almeno cinque anni e in qualche modo sfuggito all'esame di tutti i nostri sviluppatori di contratti intelligenti, sia tecnici co-fondatori, e due audit a pagamento. Ciò ci fa purtroppo mettere in discussione il valore degli audit ricevuti dai nostri revisori.
Il fatto che il bug laici dormienti per cinque anni e riaffiora solo ora suggerisce agli aggressori di utilizzare strumenti AI-assisted che rendono più ampie, automatizzate exploit ricerche vitali. È stato osservato un significativo miglioramento nelle attività di sfruttamento in tutta la scena cripto, che richiede pratiche di sicurezza più rigorose e l'uso di AI per la difesa e la revisione continua.
Ringraziamenti
Ci assumiamo la piena responsabilità di questo incidente e ci scusiamo sinceramente con tutti gli emittenti interessati.mo. Possiamo essere sollevati solo dal fatto che siamo stati in grado di rendere tutti gli emittenti completi, analizzare e contenere il danno, aggiornare i contratti colpiti il più rapidamente possibile, e contrassegnare questo incidente come risolto senza che i nostri emittenti o investitori incorressero in perdite.
Elenco completo delle transazioni dannose
L'elenco completo delle transazioni dannose è fornito di seguito per la piena trasparenza. Ogni entrata collega alla transazione su Etherscan.
- 0x3da650003c91c0f0448db3061388fd180c83e0afc650ae7ccb4b61f1145b1993
- 0x6a20cccec96cacbdec2b240a4f9329d607d247cb8b8205472f494c31f0fd54fd
- 0x79e4adfa9a8afa1ddcf99fddbe713eb47822e9fe1f1439cdabe43e50cf136365
- 0xcc4b49fa2b5e65850961ea1d7cbb3511b0c4c492c920e38e8c8caebf685a8bce
- 0x4121a5144b59cb7c3b819ed1ad0b70cf6bcb83588bbd79264f048ca0a8824eea
- 0x31a61622c822b743065cfaaec873c8dcf60e92797da1d2750ecada96c394f7c7
- 0x428065e30818b34c08a7dc9498d22f022a0f8c210afb4c94e59b00b3eb665df0
- 0x97e51a45b18349e9c7b286404fb53ecfd1995b25183a6ffc9323ff84559af02d
- 0x8a0b1309509a59c3deffa6708f9a50fc1b06575720d01f04ddd451f5f02f4912
- 0xa0013c77841955e2fe2a1109711fe3883088d33bbc1a425df3fc7d82cff00ad4
- 0x21ed5bd91f4c4f5d20d3fd919f6907f0183175f211b3821ad723d453b6141bd6
- 0x62826f656a48c7f9dc0d63cafea2b0a129516b4f321f57d97edbde28a2e26789
- 0x2c64144449273a05ddefa2f5f1edd9a17cabc7a295493d3df75b0ad2b122b261
- 0xd3678399c89b39bf6fbeb6fe18e8144518d4375c8038fe4e0db9f199227e748a
- 0x060c500df97031b30344e9ab42e478d86e35c3d445c42d3c378719764ca6dd46
- 0x88c5021e4570ec6f6c4a3c7d6577a0b61ff241c82612e0db597f206579a0cf49
- 0x522b0d4cb01a0bdaeb7eaf83a25c65bb04189b73c0882101539da269c8bf274f
- 0x01b5b03f514c5bde4c1ab074a980f25b498425c6d095b9717eaa8baec5af1cbb
- 0xa6e6aef25e6cb47a1cdaca79bb5b9065a57ae1aacf7b66b1af5a0ce3e901b379
- 0x7103d1cff801ee3b47a9ad94d5662bb33c578ac87cb5540e323fbbabbbada107
- 0x591f92ae130b471967852e44e313e592a2c3952201d28fc5623c3b7acf6e0721
- 0x03dc52dc2ef5636bc743c0c483fa5dbbeb76987d503788d5d4ade27ba4248b99
- 0xc48829bf264ce902d4c9ae9b21dfdf5fed871c161ae11bb81c999460f24321e4
- 0x2cbd3ca44907a9e5be1548a13dd516e7e9bb027b7d6a8df7c93a495144d6af23
- 0x57c6816bb44a5f0b43665f9a43c9170ef01740b84f5bd46a2ebcd1707c1a1b87
- 0xdd661886937547428bbf1c6de48bba5fd3efb88b2c0a99beb604984a001e7d6f
- 0xef0a00e196b35208ecc8155a73e387e274fd3a99e1c84675ecb41c4e38f24ccd
- 0x7154c6546220abd7f8ffc0225898becea4982dd1ffea26d571d17bf0dc3989cd
- 0x7476463d1d90e70c28f283658741ae1554b4a2e58ad08d3697c5dfd1ab64f691
- 0x2ae251fe4a44528e0ef5f03838e6e9d724db18a12930472b07615dbdd3eacf67
- 0x89e4ce31724c061e9a01084d20abbf1ddd1ea4aa421b7d797847c6f062f9c073
- 0x728a1855d18833159a40f41114296b334fc7ae16a85c0408eba1d3c2e8553a0d
- 0x7859465d6888cb88b485c85315363698196f031f89132ccc2898a75fa9a89fa5
- 0x98b9064183a258f8c37c43c2c20eab52a1d0ee948718f10aa18ff0e3955807bb
- 0x18b0c2e3bbda38b51abbcea0ca7a8694a92c5dc66bd77372f5499d1e3ddca805
- 0xec23cfd15c1a45d7e48c86a94c4dec417a11df05a9b8824a45e60dd715a23bc2
- 0x79fdc34f50a8867b7e67e25fe4953a7725b4439aeac4f0e4e1e20018d2ace564
- 0x4771e1970ff936b692c8f685fcb604611876428aaa1ab1ab6ace11441cbfc26e
- 0x6061cfe75a67a54f26868701119906ecf4f7f626e2c9e6fb11430b6745f51cc8
- 0xead00d973e111b08a07bdf4c7f6921dc47258ed2f45b543dd5ee4bde977958d6
- 0x3d529aba76f0130c9d7c11c0fdeda183154e187fadf98183974aca70b7aed82a
- 0xce0e9fe255fd20bcda2f94de18641125d2d4690d9d714494b416ba2a3f6b53fd
- 0xd97370a3010f56170d538046d21c3030bcb09b0bf06cb8924cf30649aa97bc1f
- 0x2a132ec9f8cc47ca50a4b1576bca855dcdd72e11ef2cca29a64804fccd40d4df
- 0x70c269301a27377e9e67d2ec73daeb38e965e02632cf413f3dcff0858f8a4514
- 0x2f1362ae67e530a522c2cfa0586edc3e0726339799dcd02f68213b60b5a45930
- 0x47318425e74a717cec0604938f07b72f7d54589e49cfeae518afba896ceb4539




