Dria

Swan
NFTHardhat
21,000 USDC
View results
Submission Details
Severity: low
Valid

Incomplete checks in `respond()` of `LLMOracleCoordinator.sol`

Summary

Vulnerability Details

`During respond of Oracle outputshould not be empty`

Its a crusial check that not implemented in code.

Let see what happens when this check missed

  • oracle sepond with empty Output

  • received enough responces

  • let say task.parameters.numValidations == 0so TaskStatus == completed

  • BuyerAgent call purchase()where it fetch output == empty

  • assets fetched from output == empty

  • operation preformed on empty

function respond(uint256 taskId, uint256 nonce, bytes calldata output, bytes calldata metadata)
public
onlyRegistered(LLMOracleKind.Generator)
onlyAtStatus(taskId, TaskStatus.PendingGeneration)
{
.......
.......
// check if we have received enough responses & update task status
bool isCompleted = responses[taskId].length == uint256(task.parameters.numGenerations); // @audit what if `TaskStatus.PendingValidation` and another response pushed to `responses[]`
if (isCompleted) {
if (task.parameters.numValidations == 0) {
// no validations required, task is completed
task.status = TaskStatus.Completed;
emit StatusUpdate(taskId, task.protocol, TaskStatus.PendingGeneration, TaskStatus.Completed);
} else {
// now we are waiting for validations
task.status = TaskStatus.PendingValidation;
emit StatusUpdate(taskId, task.protocol, TaskStatus.PendingGeneration, TaskStatus.PendingValidation);
}
}
}

https://github.com/Cyfrin/2024-10-swan-dria/blob/main/contracts/llm/LLMOracleCoordinator.sol#L207-L250

Impact

Tools Used

Manual Review

Recommendations

Should check that outputis not empty

Updates

Lead Judging Commences

inallhonesty Lead Judge 8 months ago
Submission Judgement Published
Validated
Assigned finding tags:

Incomplete checks in `respond()` of `LLMOracleCoordinator.sol`, `output` is not checked

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.