VULNERABILITY REPORT: Blockchain RPC Proxy Security¶
Report ID: SAGA-SEC-001 Severity: HIGH Status: ✅ FIXED Date: 2025-10-03 Auditor: Security Auditor (TDD Methodology)
EXECUTIVE SUMMARY¶
Обнаружена критическая уязвимость в Blockchain RPC Proxy endpoint, позволяющая unauthorized доступ к blockchain данным, DoS атаки, и information disclosure.
VULNERABILITY DETAILS¶
Attack Vector: Unauthorized Blockchain Access¶
Endpoint: /api/blockchain/rpc
Method: POST
Authentication: ❌ NONE (before fix)
Discovered Issues:
- ❌ NO AUTHENTICATION
- Endpoint доступен без JWT токена
- Любой может выполнять blockchain RPC запросы
-
Information disclosure: балансы, транзакции, smart contract data
-
❌ CORS WILDCARD
Access-Control-Allow-Origin: *- Cross-origin RPC abuse возможен с любого домена
-
Нарушение same-origin security policy
-
❌ NO RATE LIMITING
- DoS вектор: множественные параллельные запросы
- Возможность перегрузить VPS blockchain node
- Нет защиты от automated scrapers
ATTACK SCENARIOS¶
Scenario 1: Balance Enumeration¶
// Атака: узнать балансы всех пользователей
const addresses = ['0xf39Fd...', '0x70997...', ...];
for (const addr of addresses) {
const balance = await rpcProxy({
method: 'eth_getBalance',
params: [addr, 'latest']
});
// ✅ BEFORE FIX: 200 OK - баланс получен
// ❌ AFTER FIX: 401 Unauthorized
}
Scenario 2: DoS Attack¶
// Атака: параллельные запросы для перегрузки ноды
const requests = Array(100).fill().map(() =>
rpcProxy({ method: 'eth_blockNumber' })
);
await Promise.all(requests);
// ✅ BEFORE: все 100 запросов успешны
// ❌ AFTER: все заблокированы без auth
IMPLEMENTED FIX¶
Changes Made:¶
1. JWT Authentication (blockchain_rpc_proxy_router.go)
// Added authMiddleware field to struct
authMiddleware *middleware.AuthMiddleware
// Wrapped endpoint with JWT protection
router.Handle("/api/blockchain/rpc",
rpc.authMiddleware.WithJWTAuth(
http.HandlerFunc(rpc.proxyRPCRequest)
)).Methods("POST", "OPTIONS")
2. Restrictive CORS
// BEFORE:
w.Header().Set("Access-Control-Allow-Origin", "*")
// AFTER:
allowedOrigins := rpc.config.GetAllowedOrigins()
if origin in allowedOrigins {
w.Header().Set("Access-Control-Allow-Origin", origin)
}
3. Security Test (rpc-proxy-security.spec.ts)
- TDD approach: test created FIRST
- Comprehensive attack scenario coverage
- Validates fix effectiveness
Test Results:¶
✅ should require authentication: 401 (was 200)
✅ should prevent balance queries: 401 (was 200)
✅ should prevent tx queries: 401 (was 200)
✅ DoS test: 0/20 successful (was 20/20)
✅ CORS: undefined (was "*")
IMPACT ASSESSMENT¶
Before Fix:¶
- Confidentiality: HIGH - любой может читать blockchain данные
- Availability: HIGH - DoS вектор через RPC spam
- Integrity: LOW - read-only endpoint
After Fix:¶
- Confidentiality: MITIGATED - требуется JWT auth
- Availability: IMPROVED - unauthorized requests блокируются
- Integrity: N/A - endpoint read-only
VERIFICATION¶
Manual Testing:
# Without auth - должно вернуть 401
curl -X POST http://localhost:8080/api/blockchain/rpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
# Result: 401 Unauthorized
# With valid JWT - должно работать
curl -X POST http://localhost:8080/api/blockchain/rpc \
-H "Authorization: Bearer <valid-jwt-token>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
# Result: 200 OK
Automated Testing:
RECOMMENDATIONS¶
Completed:¶
- ✅ JWT authentication на RPC proxy
- ✅ Restrictive CORS policy
- ✅ Security test coverage
Future Improvements:¶
- Rate Limiting: Добавить token bucket для RPC endpoint
- Request Logging: Детальное логирование RPC запросов для audit
- IP Whitelisting: Опциональное ограничение по IP для production
REFERENCES¶
- Security Role:
docs/roles/security-auditor.md - Test Suite:
frontend/e2e/tests/security/api/rpc-proxy-security.spec.ts - Fix Implementation:
backend/shared/routing/blockchain_rpc_proxy_router.gobackend/shared/routing/router_factory.go
SECURITY PRINCIPLES APPLIED¶
- Zero Trust: No endpoint accessible without authentication
- Defense in Depth: Multiple security layers (JWT + CORS + future rate limiting)
- TDD Methodology: Test-first development ensures fix effectiveness
- Least Privilege: RPC access только для authenticated users
Next Steps: Продолжить security audit для обнаружения дополнительных уязвимостей в проекте.