-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug]Malicious validators can prevent legitimate transactions from being executed. #2451
Comments
See: https://github.com/AleoHQ/snarkVM/issues/2451 A malicious validator can generate a transaction with mostly the same transitions, which will be aborted causing the victim's transaction to be filtered out and dropped.
This looks like an issue to me as well. Phrasing the issue in my own words: executions require full verification to avoid malleability attacks. There is a tradeoff between spam reduction (if we abort on partial transaction contents) v.s. censorship resistance (if we abort on the full transaction). The latter seems more important to me. Fortunately, deployments don't have this particular malleability issue, so a quickfix can be to only call early I think a similar issue is possible when a malicious validator replaces global_state_root/proof/verifying_keys - given that those are not included in the transaction id calculation: https://github.com/AleoHQ/snarkVM/blob/mainnet/ledger/block/src/transaction/merkle.rs#L138 . This might be intentional design, to enable delegation of proofs while retaining deterministic transaction ids. |
Executions require full verification to avoid malleability attack. See: https://github.com/AleoHQ/snarkVM/issues/2451
After additional consideration, we have decided to only partially mitigate this for now and prioritize DoS prevention. Slashing can likely properly mitigate this censorship issue in the future. |
This looks like an issue to me as well. |
IIRC we weren't considering any slashing methods; has anything changed since then? |
I view it as likely to be essential to add post-mainnet launch. |
Doesn't sound like we'd block mainnet for this. Marking as such. Feel free to argue. |
Should be addressed with the following fixes: |
https://hackerone.com/reports/2498849
Summary:
Malicious validators can prevent legitimate transactions from being executed.
Proof-of-Concept (PoC)
FakeTransaction = Transaction + sample_transiton()
.FakeTransaction
andTransaction
have differentTransactionID
s but share the same TransitionIDs, InputIDs, OutputIDs, and TPK. According to the current logic in the code, if the FakeTransaction is sorted before the Transaction in the DAG, it will cause the Transaction to be aborted.WorkerPing
, potentially causing honest validator nodes to prioritize the FakeTransaction over the Transaction.Impact
This attack can lead to a large number of legitimate transactions being aborted, and the
abort_transaction_id
will be recorded in the ledger, requiring users to regenerate transactions.The text was updated successfully, but these errors were encountered: