مستندات دارا
مرجع فنیبازبینی‌ها
این صفحه فقط به انگلیسی موجود است.

Review pass 1

Stage 34–35, 2026-10-30. Scope: the whole repository, against the brief's §152 list (issuer and Treasury key risk, Stellar asset assumptions, trustlines, authorization, clawback, sequence races, retries, duplicates, wrong network, supply, oversell, double issuance or burn, backing, balance, precision, stale quotes, indexer gaps, RPC and hosted dependencies, disaster recovery, Docker, monitoring, Layer-2 coupling). Method: reading the code paths for each item, the scans (govulncheck, pnpm audit, gosec, Grype), the security, failure and concurrency tests added in this pass, and the container and Chrome runs.

Findings

IDSev.FindingEvidenceImpactFixRegression testStatus
R1-01CRITICALNext.js 16.3.8 in all four apps: two unauthenticated RCE advisories (image optimisation with SVG; use cache) and a DoSpnpm audit, GrypeRemote code execution on the web serversNext.js 16.4.3make vuln (pnpm audit clean)Fixed (the Ethereum sibling still has it)
R1-02HIGHReachable Go standard-library and x/net vulnerabilities (HTTP/2, TLS, x509, html/template)govulncheck: 12 reachableDoS / parsing flaws on the API listenersGo 1.27.3, x/net 0.62.0, go-jose 4.1.6make vuln (0 reachable)Fixed
R1-03HIGHNo production signer backend: derived refuses production and Mainnet by design, and nothing else existssigner.NewDerivedMainnet cannot launchVault Transit backend behind signer.Signer (SIGNER_BACKEND=vault)make vault-test (real OpenBao; a Vault-signed transaction applied on local Stellar)Fixed (owner chose Vault, 2026-10-31)
R1-04HIGHThe data-lake backfill source never prepared its range: the first backfill read would fail, leaving the indexer stuck once it fell outside the RPC window; and backfill could not be configured at allindexer.BackendSource, cmd/daraSilent loss of indexing → reconciliation failing indexer_current indefinitelyPrepare an unbounded range, re-prepare on jumps; BACKFILL_DATASTORE_* configurationTestBackendSourcePreparesBeforeReadingFixed (not yet run against a real lake: Q-10)
R1-05MEDIUMFR-22 daily BUY/SELL limits missing; the daily transfer count could be exceeded by concurrent requests (count then insert without a lock)trading.checkTransferLimitsLimits bypassable by parallel requestsDaily limits per asset (migration 00011); advisory lock per customer/asset/sideTestDailyBuyLimitUnderConcurrencyFixed
R1-06MEDIUMIdempotent replay not byte-identical (jsonb reorders keys)TestHTTPSecurityClients comparing bodies or signatures over them breakresponse_body as json (migration 00010)TestHTTPSecurityFixed
R1-07MEDIUMA single transient RPC error failed a read when one node was configured (captive core restarts answer errors briefly)Flaky setup failure, startup race in the demoSpurious failures, aborted startupRetry the full read round with backoffe2e suite green under loadFixed
R1-08MEDIUMcustody:CUSTOMER is the only signer of every customer accountcustody.OnboardSpecCompromise moves customer balances among authorized accounts (detected by the indexer)Accepted design (custodial); HSM, monitoring, clawback + re-issue path documentedOutsider scenarios in TestPlatformLifecycleAccepted risk, documented (KEY_MANAGEMENT.md)
R1-09MEDIUMSettlement capacity is one transaction per channel per ledger; 3 channels ≈ 0.5 settlements/s on MainnetPerformance baselineOrders queue at peakSize channels from expected volume; batching laterBaseline in evidenceOpen: needs Q-08
R1-10MEDIUMWeb runtime images carried npm/corepack with vulnerable undici and brace-expansionGrypeUnused but present code with advisoriesRemove package managers from the runtime stageRescan: no Critical/High; 3 Medium busybox (no fix)Fixed (rescan in evidence)
R1-11MEDIUMAdding a later asset to COLD needs a human-signed ChangeTrust, which the proposal flow does not buildissuance purposesManual step for each new assetManual procedure documented—Open (documented in ISSUER_OPERATIONS.md §3)
R1-12LOWFeePerOp converted an RPC-supplied uint64 to int64 before cappinggosec G115A wrapped value fell back to the minimum feeExplicit cap before conversiongo test ./internal/stellarFixed
R1-13LOWDead Ethereum incident kinds (reorgs, nonces, reserve cap, finality)incident.goConfusing operators and docsRemoved; kinds listed in INCIDENT_RESPONSE.mdbuildFixed
R1-14LOWDemo race: deciding an unfreeze before the freeze is recorded (the API correctly refused)make demo failureDemo onlyDemo waits as an officer wouldmake demoFixed
R1-15LOWThe backend exports no traces although the monitoring stack expects themdocker-compose.observability.ymlLess debugging context; logs carry request IDsTracing env removed until implemented—Open
R1-16INFOThe company npm mirror returns 500 for Next.js 16.4.3; container DNS cannot reach the public registryimage buildsImage builds fail in this environmentBuild with --network=host and the public registry—Environment, reported

Items reviewed with no finding: wrong-network transactions (signer bound to one passphrase; startup checks the manifest; TestDerivedRefusesMainnetAndProduction); double issuance (in-flight issuance counted against backing; CAS settlement); double burn (CAS; hold); oversell (TestConcurrentBuysNeverOversellTheHotFloat); stale quotes (atomic Consume with expiry); duplicate transactions (one intent per purpose and source; UNKNOWN never rebuilt); sequence races (channel leases; foreign use quarantines); supply calculation (full formula incl. claimable balances, pools, contract balances); AUTH key scope (weight 1 = low threshold only: cannot claw back or issue); hosted dependencies (none in the request path); Docker (non-root, read-only, capabilities dropped, admin API unpublished); Layer 2 (only CapacityProvider).

در این صفحه