Unauthenticated Proof Status Update Vulnerability
Description
The POST /update-proof-status endpoint in lensmint-public-server lacks any form of authentication.
It accepts requests to update the verification_status and proof_tx_hash for any given claim ID.
Impact
A malicious actor can bypass the entire Zero-Knowledge proof generation process.
They can:
- Take an unverified image's claim ID
- Call this endpoint
- Mark it as "verified" with a fake transaction hash
This completely undermines the device authenticity guarantees of the project.
Reproduction Steps
-
Start the lensmint-public-server locally on port 5001.
-
Locate any valid claim_id
(for example from the check-claim endpoint or database).
-
Send a malicious POST request using curl:
curl -X POST http://localhost:5001/update-proof-status \
-H "Content-Type: application/json" \
-d '{
"claim_id": "YOUR_TARGET_CLAIM_ID",
"verification_status": "verified",
"proof_tx_hash": "0xFakeTransactionHash12345"
}'
- The server will respond with:
{
"success": true,
"message": "Proof status updated"
}
- Visit:
- Observe that the UI now incorrectly displays the proof as "verified".
Suggested Fix
Implement authentication for the endpoint. Possible approaches:
API Key Authentication
Shared Secret Webhook between hardware-web3-service and the public server
Token-based authentication (JWT or similar)
Unauthenticated Proof Status Update Vulnerability
Description
The
POST /update-proof-statusendpoint in lensmint-public-server lacks any form of authentication.It accepts requests to update the
verification_statusandproof_tx_hashfor any given claim ID.Impact
A malicious actor can bypass the entire Zero-Knowledge proof generation process.
They can:
This completely undermines the device authenticity guarantees of the project.
Reproduction Steps
Start the
lensmint-public-serverlocally on port 5001.Locate any valid
claim_id(for example from the
check-claimendpoint or database).Send a malicious POST request using
curl:{ "success": true, "message": "Proof status updated" }Suggested Fix
Implement authentication for the endpoint. Possible approaches:
API Key Authentication
Shared Secret Webhook between hardware-web3-service and the public server
Token-based authentication (JWT or similar)