High / Befundstatus
Historisch belegtDer Lending-Gegencheck stützt die historische High-Einstufung.
DeFi Audit / 2026-10-08 / 2026-10-09
Der Auditbestand vom 8.–9. Oktober 2026 stützt einen High-Befund im Lending und eine Medium-Bewertung der Bridge. Die Auswertung zeigt die Belege, Gegenprüfungen und Regeln für eine Abhilfeprüfung.
Heutiger Zustand und etwaige Fixes nicht geprüft. Die Codebeispiele sind defensive Modelle, kein STRATO-Quellcode.
Der Gegencheck hält die Lending-Einstufung nach korrigierter Vermögenszuordnung aufrecht. Für die Bridge sind Gesamtschweregrad und Impact getrennt zu lesen.
Der Lending-Gegencheck stützt die historische High-Einstufung.
Im geprüften Bestand wurde kein Critical belegt.
Für diesen Filter ist kein Eintrag dokumentiert.
Besicherung, Zustandsübergänge und Accounting werden im Zusammenhang betrachtet. Der Artikel ordnet historische Berichtsevidenz ein.
Systemübergreifende Übergänge brauchen klar definierte Vertrauens- und Finalitätsannahmen. Lokale Modelle und reale Beobachtungen bleiben getrennt.
Datenqualität und Aktualität sind Teil der Sicherheitsannahmen. Eine begrenzte Gegenprüfung ist keine Garantie für alle möglichen Zustände.
Erklärendes Schema, keine Live-Telemetrie und kein Audit-Score. Die Einordnung und ihre Grenzen stehen im Artikel.
Die Prüfung fragt, ob die Finanzkomponenten von STRATO Ansprüche und Vermögen konsistent behandeln und welche Verlustpfade der untersuchte Zustand tatsächlich zulässt. Gemeint ist die STRATO-Blockchain auf upquark, nicht der Hostinganbieter.
Der Bestand vom 8.–9. Oktober 2026 umfasst Lending, CDP, SaveUSDST, klassische und Yield-Vaults, Pools, Oracles, Bridge sowie MetalForge/TokenFactory. Diese Auswertung führt die damaligen Berichte zusammen. Die offiziellen Projektquellen dienen zur Einordnung; den Deployment-Zustand belegen die im Audit erhobenen Daten.
Übersicht der im Beitrag eingeordneten Komponenten. Kein vollständiger Callgraph und kein aktuelles Deployment-Inventar.
Bevor ein Quelltextbefund wirtschaftlich bewertet wird, müssen ausführende Logik, Registry-Zuordnung und Verwahrort feststehen. Diese Rollen können bei unterschiedlichen Komponenten liegen. Im Lending-Gegencheck wurde die zunächst angenommene Vermögenszuordnung korrigiert. Die Bewertung musste sich daher auf den richtigen Halter beziehen, nicht nur auf den geprüften Logikvertrag.
Das folgende Modell vergleicht vier Merkmale zweier erfundener Manifeste. Es meldet eine geänderte Routingrevision. Das ist ein Anlass zur erneuten Zuordnung, noch kein Sicherheitsbefund. Übereinstimmende Werte wären ebenfalls nur so zuverlässig wie die zugrunde liegenden Belege.
expected = {"network": "demo", "implementation": "rev-A", "routing": "map-A", "custody": "pool-A"}
observed = {**expected, "routing": "map-B"}
required = ("network", "implementation", "routing", "custody")
def compare(left, right):
missing = [key for key in required if key not in left or key not in right]
changed = [key for key in required if key in left and key in right and left[key] != right[key]]
return {"matches": not missing and not changed, "missing": missing, "changed": changed}
result = compare(expected, observed)
assert result["changed"] == ["routing"]
print(result)
Zeilennummern gelten für diesen Ausschnitt. Erklärung wählen, um den Bereich zu markieren.
Die Berichte verwenden Quelltext, zeitlich verankerte Zustandsabfragen, Indexabgleich, lokale Rechnungen und Simulationen. Quelltext erklärt eine Regel; Zustandsdaten zeigen, welche Konfiguration und Bestände zur Prüfzeit vorlagen. Eine lokale Simulation prüft Verhalten unter ihren Modellannahmen.
Die dokumentierten Schreibversuche wurden vor der Contract-Ausführung abgewiesen. Sie zeigen keine erfolgreiche Zustandsänderung. Nicht persistierende Aufrufe sind ebenfalls keine ausgeführten Transaktionen. Das Modell darunter hält deshalb Integrität, Methodenbeschreibung und Schreibbehauptung getrennt. Ein passender Hash prüft Bytes, nicht die Wahrheit einer Beobachtung.
from hashlib import sha256
payload = b"invented local state observation"
record = {"digest": sha256(payload).hexdigest(), "anchor": "snapshot-A",
"method": "local-model", "persistent": False}
allowed = {"source-review", "state-read", "local-model", "executed-write"}
def inspect(data, evidence):
intact = sha256(data).hexdigest() == evidence["digest"]
described = bool(evidence["anchor"]) and evidence["method"] in allowed
write_claim = evidence["method"] == "executed-write" and evidence["persistent"] is True
return {"intact": intact, "described": described, "write_claim": write_claim}
assert inspect(payload, record)["write_claim"] is False
assert inspect(payload + b"changed", record)["intact"] is False
print(inspect(payload, record))
Zeilennummern gelten für diesen Ausschnitt. Erklärung wählen, um den Bereich zu markieren.
Für Lending hält die historische Gegenprüfung die High-Einstufung aufrecht. Sie verbindet den bekannten Befund mit der korrigierten Vermögenszuordnung und dem damaligen wirtschaftlichen Zustand. Critical wurde nicht belegt.
Dabei sind drei Aussagen auseinanderzuhalten: Ein Fehler in der Logik, seine Erreichbarkeit im konkreten Deployment und die wirtschaftlichen Voraussetzungen eines Verlusts. Der Nachweis einer dieser Aussagen ersetzt die anderen nicht. Die abgewiesenen Schreibversuche liefern insbesondere keinen Beleg für eine erfolgreiche Entnahme.
Für die Abhilfeprüfung kommt es auf eindeutige Ansprüche, korrekt gebundene Sicherheiten und eine unabhängig rekonstruierte Bilanz an. Eine heutige Einstufung erfordert neue Zustandsbelege.
Die native Bridge wurde insgesamt als Medium bewertet: High Impact bei Low Likelihood. Die lokale Modellprüfung stützt eine bedingte Schadenswirkung, belegt aber weder die nötige Kontrolle durch einen Angreifer noch eine Ausführung im Produktionsdienst. High Impact ist hier eine Bewertungsdimension, kein High-Schweregrad.
Für die defensive Prüfung sind Beobachtung, Bestätigung und Abschluss getrennte Zustände. Das Modell erlaubt nur ausdrücklich aufgeführte Übergänge und verweigert einen Abschluss ohne vorherige Bestätigung. Ob diese Bestätigung belastbar ist, beantwortet es nicht: Konsens, Betriebszustand und tatsächliche Finalität liegen außerhalb des Beispiels.
def advance(state, event, verified=False):
if state == "new" and event == "observe":
return "observed"
if state == "observed" and event == "confirm" and verified is True:
return "confirmed"
if state == "confirmed" and event == "complete":
return "completed"
raise ValueError("transition rejected")
assert advance("observed", "confirm", verified=True) == "confirmed"
try:
advance("observed", "complete")
except ValueError:
print("unconfirmed completion rejected")
else:
raise AssertionError("invalid transition accepted")
Zeilennummern gelten für diesen Ausschnitt. Erklärung wählen, um den Bereich zu markieren.
Bei SaveUSDST wurde im geprüften Zustand kein frei auslösbarer schwerer Einlagenverlust festgestellt. Der Bericht behandelt daneben eine engere Frage zur Verfügbarkeit erwarteter Erträge. Diese betrifft einen anderen Anspruch als das eingezahlte Kapital.
Die Vault-Prüfung fand die für eine untersuchte Verstärkungshypothese vorausgesetzte gemeinsame Ressourcentopologie nicht vor. Damit fehlte eine notwendige Voraussetzung. Verwahrungskonzentration kann trotzdem relevant sein, belegt aber nicht diesen Verlustpfad.
Das Rechenmodell addiert Liquidität und eingesetztes Vermögen in derselben ganzzahligen Einheit und vergleicht sie mit Verbindlichkeiten. Es prüft eine Summenbeziehung. Ob Forderungen rechtmäßig, Strategiebestände werthaltig oder Vermögen rechtzeitig verfügbar sind, muss separat geprüft werden.
def reconcile(cash, deployed, liabilities):
values = [cash, *deployed, liabilities]
if any(type(value) is not int or value < 0 for value in values):
raise ValueError("non-negative integer units required")
assets = cash + sum(deployed)
return {"assets": assets, "liabilities": liabilities,
"surplus": assets - liabilities, "covered": assets >= liabilities}
assert reconcile(60, [25, 15], 100)["surplus"] == 0
assert reconcile(60, [25, 15], 101)["covered"] is False
print(reconcile(60, [25, 15], 100))
Zeilennummern gelten für diesen Ausschnitt. Erklärung wählen, um den Bereich zu markieren.
Der Oracle-Bericht unterscheidet veraltete Einträge von den zur Prüfzeit wirtschaftlich eingebundenen Feeds. Die veralteten Einträge begründeten im geprüften Snapshot keinen schweren Verlustbefund. Ein alter Zeitstempel allein sagt noch nicht, ob eine aktive Finanzkomponente diesen Preis verwendet.
Das Modell akzeptiert nur positive Preise mit bekannten, nicht zukünftigen und ausreichend jungen Zeitstempeln. Fehlende Angaben führen zur Ablehnung. Damit prüft es Frische, nicht Preisrichtigkeit, Herkunft oder die tatsächliche Nutzung durch eine Anwendung.
def valid_price(price, updated, now, max_age):
values = (price, updated, now, max_age)
if any(type(value) is not int for value in values):
return False
if price <= 0 or updated < 0 or now < 0 or max_age < 0:
return False
age = now - updated
return 0 <= age <= max_age
assert valid_price(100, 990, 1000, 30)
assert not valid_price(100, 900, 1000, 30)
assert not valid_price(100, 1001, 1000, 30)
assert not valid_price(100, None, 1000, 30)
print("fresh accepted; stale, future and missing rejected")
Zeilennummern gelten für diesen Ausschnitt. Erklärung wählen, um den Bereich zu markieren.
Die CDP- und MetalForge/TokenFactory-Berichte etablierten in ihren geprüften Pfaden keinen schweren frei auslösbaren Vermögensverlust. Die Pool-Gegenprüfung begrenzte die wirtschaftliche Bedeutung des untersuchten Randverhaltens. Auch aus diesen Ergebnissen ergab sich kein Critical.
Die Gegenprüfungen sind Teil des Audits: Fehlt die erforderliche Berechtigung, wirtschaftliche Nutzung oder Topologie, ist die konkrete Hypothese nicht bestätigt. Das sagt nichts Abschließendes über ungeprüfte Pfade oder spätere Änderungen. Die Ergebnisse gelten für den dokumentierten Umfang, nicht als Freigabe des Gesamtsystems.
Die Abhilfeprüfung sollte bei den nachgewiesenen Zuordnungen beginnen: aktuelle Implementierung, Routing und Vermögenshalter erneut binden. Danach sind Ansprüche gegen Bestände unabhängig zu rekonstruieren. Bridge-Übergänge brauchen dokumentierte Bestätigungsvoraussetzungen; Preisfrische muss dort geprüft werden, wo der Preis eine wirtschaftliche Entscheidung beeinflusst.
Die Beispiele erläutern diese Regeln, ersetzen aber keine Tests der tatsächlichen Implementierung. Ein produktiver Regressionstest muss eine verletzte Invariante erkennen und die relevante Konfiguration abdecken. Ob STRATO solche Änderungen vorgenommen hat, wurde in dieser Auswertung nicht geprüft.
Der Lending-Befund bleibt im historischen Bestand High. Die Bridge bleibt insgesamt Medium; ein Critical wurde nicht belegt. Besonders wichtig war die korrigierte Vermögenszuordnung: Ohne sie hätte die wirtschaftliche Bewertung auf der falschen Instanz beruht.
Als nächster Schritt ist der damalige Befund an das aktuelle Deployment zu binden und eine etwaige Abhilfe gegen dieselben Sicherheitsregeln zu prüfen.
Die Links liefern Projektkontext. Für das Urteil zählt der im Audit beschriebene Prüfbestand. Prüfmodelle und echte Werkzeugauszüge sind getrennt gekennzeichnet.
STRATO Platform — öffentliches Projekt / public project ↗BlockApps — STRATO Mercata developer documentation ↗Der Lending-Befund bleibt im historischen Bestand High. Die Bridge bleibt insgesamt Medium; ein Critical wurde nicht belegt. Besonders wichtig war die korrigierte Vermögenszuordnung: Ohne sie hätte die wirtschaftliche Bewertung auf der falschen Instanz beruht. Als nächster Schritt ist der damalige Befund an das aktuelle Deployment zu binden und eine etwaige Abhilfe gegen dieselben Sicherheitsregeln zu prüfen.
Gespräch starten