docs: add missing redirects to audit reports in README#2
Conversation
|
Report type: Blockchain/DLT Target: https://github.com/shardeum/shardus-core/tree/dev Impacts: Network not being able to confirm new transactions (total network shutdown) RPC API crash affecting projects with greater than or equal to 25% of the market capitalization on top of the respective layer Description This bug can harm network in many ways, for example it disallows any other archiver from joining the network, or when a node wants to join/left the network, it finds a random archiver and requests some data from it, because a malicious actor can join it's archivers more than specified limit, it is possible that every time a node selects a random archiver that archiver is one of these malicious ones. So bad actor can return invalid data and break the network. Another example which i provided a POC for it, can completely disable archivers functionality to save Cycle data, so history of blockchain would be lost forever. I will explain the problem here and provide a POC after. Vulnerability Details shardus-core/src/p2p/Archivers.ts export function registerRoutes() { src/shardus/index.ts export function addArchiverJoinRequest(joinRequest: P2P.ArchiversTypes.Request, tracker?, gossip = true) { const { So our join request is appended to joinRequests array. We continue with how shardeum uses this list. In every cycle a node calls getTxs() function on every submodule to process those transactions and adds them to block. shardus-core/src/p2p/CycleCreator.ts function collectCycleTxs(): P2P.CycleCreatorTypes.CycleTxs { shardus-core/src/p2p/Archivers.ts export function getTxs(): P2P.ArchiversTypes.Txs { shardus-core/src/p2p/CycleCreator.ts async function runQ3() { shardus-core/src/p2p/CycleCreator.ts function makeCycleData(txs: P2P.CycleCreatorTypes.CycleTxs, prevRecord?: P2P.CycleCreatorTypes.CycleRecord) { shardus-core/src/p2p/CycleCreator.ts function makeCycleRecord( shardus-core/src/p2p/Archivers.ts export function updateRecord(txs: P2P.ArchiversTypes.Txs, record: P2P.CycleCreatorTypes.CycleRecord) { const joinedArchivers = txs.archivers So i will provide a POC to add more archivers than expected, after that i will show one consequence of this bug which is blocking archivers from persisting new blocks Impact Details References Proof of Concept git clone git@github.com:shardeum/shardeum.git After all nodes became active run cd archive-server to go to this repository, then run npm install && npm run prepare create a file and name it sign.js and write below code to it sign.js const { signObj, stringify } = require('@shardus/crypto-utils') utils.js const fetch = require('node-fetch') join.js const Crypto = require('./build/Crypto.js') By default configuration, network does not removes an archiver if it is down or not responding. But we assume this functionality is enbaled and we want our new archivers to respond to network requests. One way is to actually run 1000 archiver but it is not required, we can simply fool the network, and proxy every request to a real archiver. for this i used nginx. install nginx on your device (sudo apt install nginx) and append this text to /etc/nginx/nginx.conf. It is like a port mapping from our archivers port to real archiver port which is 4000. So every request to our archiver would be answered by archiver at 127.0.0.1:4000. stream { now if you open http://localhost:4000/archivers in your browser, you can see many archivers are joined as active to the network. Untill now we showed how archiver join limit validation bug can not prevent archivers from joining the network. Now we are going to use this bug and make all archivers useless. Open http://localhost:4000/archivers in your browser, copy two of our fake archiver publicKeys which have different port number, crate a file and name it gossipdata.js with following text. Replace pkList array items with those two publicKeys. Also open http://localhost:4000/cycleinfo/1 in your browser and copy first item of cycleInfo array, and replace default value of cycle object in following file with it. gossipdata.js const fetch = require('node-fetch') |
francojaf
left a comment
There was a problem hiding this comment.
0x700D8c89bcC2AC85A3D011Ee4F031A4FD6403a67
This PR updates all audit README.md files to include missing redirects.
Previously, some audit READMEs had links redirecting to their main README, while others did not.
This change makes the structure consistent across all audits.
Changes
Added missing redirects in all audit README.md files
Ensured uniform navigation between audit reports
Motivation
Consistency in documentation helps contributors and researchers navigate audit reports more easily, reducing confusion and improving usability.
Notes
In the ethereum-protocol-attackaton, reports 37113 and 38459 are listed in the README, but their corresponding report files are missing.