K0NSULT // ai-truth/ipIII
k0nsult.cloud / ai-truth / ipIII / orchestrator / connector-sdk

Connector SDK — kontrakt parsera ROADMAP (spec)

Specyfikacja kontraktu, jaki musi spełnić każdy konektor Evidence & Resilience Orchestrator: input → normalizacja → evidence. To nie jest ogłoszenie gotowego pakietu — SDK jako wydawany artefakt (npm/CLI/plugin registry) nie istnieje. Istnieją za to działające parsery referencyjne w kodzie serwera (Burp/ZAP/Nessus/Qualys/generic), z których ta specyfikacja jest wyprowadzona.

Status jawnie mieszany. Ta strona opisuje kontrakt (interfejs) parsera jako specyfikację ROADMAP — pakiet SDK do samodzielnej dystrybucji (npm/CLI generator/plugin registry) nie został wydany. To, co realnie działa dziś w kodzie serwera i przechodzi ten sam kontrakt „na żywo" (import → normalizacja → zapis w PostgreSQL z hash + chain-of-custody), to parsery referencyjne: Burp/ZAP/Nessus/Qualys/generic CSV/JSON — oznaczone LIVE v1. Nie sprzedajemy pakietu, którego nie ma — opisujemy kontrakt, z którego korzystają istniejące parsery, żeby ktokolwiek mógł dodać kolejny w tym samym kształcie.
Kontrakt: surowy plik/webhook → obiekt finding → evidence z dowodem pochodzenia.

Każdy parser (istniejący lub przyszły) przyjmuje surowe dane narzędzia (XML/JSON/CSV) i zwraca tablicę znormalizowanych obiektów finding o stałym kształcie pól. Warstwa Evidence dokleja hash, chain-of-custody i status pewności — parser nie decyduje o priorytecie incydentu ani nie wykonuje żadnego testu; tylko tłumaczy format.

ŚCIEŻKA: PLIK / WEBHOOK narzędziaPARSER (kontrakt SDK)finding[] znormalizowanyNORMALIZE (dedup/hash/severity)EVIDENCE

Kontrakt parsera — kształt wejścia/wyjścia

Parser to czysta funkcja: raw → finding[]. Brak efektów ubocznych, brak zapisu do bazy, brak sieci — to zadanie warstwy Normalize/Evidence, nie parsera. Poniżej kształt obiektu finding, wspólny dla wszystkich parserów referencyjnych dzisiaj (wyprowadzony z routes/ip3-parsers.js i routes/ip3-parsers-ext.js).

// Kontrakt (spec, nie pakiet do instalacji) — kształt zwracany przez każdy parser
type Finding = {
  title:         string,           // wymagane; nazwa podatności/ustalenia
  severity:      'P0'|'P1'|'P2'|'P3', // znormalizowane z tekstu/skali narzędzia (critical/high/.../riskcode 0-3/1-5)
  cve:           string | null,    // CVE-YYYY-NNNNN lub CWE-NNN, pierwszy dopasowany
  cvss:          string | null,    // surowy score, jeśli źródło go podaje (nie przeliczany)
  incident_type: string,           // domyślnie 'podatnosc'
  description:   string,           // odkodowany tekst (bez XML/CDATA), skrócony
  host:          string            // adres/hostname/IP celu z raportu narzędzia
};

// Sygnatura funkcji parsera (przykład: Qualys XML, routes/ip3-parsers-ext.js)
function parseQualysXml(xml: string): Finding[]

// Zasada: parser NIE łączy się z siecią, NIE wykonuje testu, NIE zapisuje do DB.
// To zadanie warstwy Normalize (dedup/hash/severity) i Evidence (chain-of-custody).

Jak dodać nowy konektor — 4 kroki (spec)

Krok 1 — Fixture. Zbierz przykładowy eksport narzędzia (syntetyczny/demo, bez danych produkcyjnych klienta) jako plik testowy.
Krok 2 — Mapowanie pól. Zidentyfikuj kolumny/tagi źródła i zmapuj na pola Finding — wzorem parseGenericCsv (tolerancyjne nazwy nagłówków: title|name|finding|vulnerability|issue).
Krok 3 — Normalizacja severity. Użyj wspólnego helpera normSev() (tekst critical/high/medium/low + numeryczne skale narzędzia, np. ZAP riskcode 0-3, Qualys 1-5) zamiast pisać własną tabelę od zera.
Krok 4 — Test jednostkowy + fixture. Każdy parser referencyjny ma test z przykładowym plikiem (patrz niżej) — bez testu parser nie jest uznawany za LIVE, tylko za szkic.

Parsery referencyjne — co jest LIVE dzisiaj

Zgodnie z regułą „bez kodu + testu + endpointu = nie LIVE": poniższe parsery działają w kodzie serwera i mają testy jednostkowe/integracyjne. To nie jest wydany pakiet SDK — to wewnętrzne moduły, z których wyprowadzono kontrakt powyżej.

ParserFormat wejściaModuł (kod)TestStatus
Burp SuiteXML (<issues><issue>)routes/ip3-parsers.js parseBurpXmltests/ip3-parsers-ext.unit.js i pokrewneLIVE v1
OWASP ZAPJSON + XML (alertitem)routes/ip3-parsers.js parseZapJson/parseZapXmlunitLIVE v1
Nessus / TenableCSVroutes/ip3-parsers.js parseNessusCsvunitLIVE v1
Qualys VMDRCSV + XMLroutes/ip3-parsers-ext.js parseQualysCsv/parseQualysXmlunitLIVE v1
Generic CSVCSV (nagłówki elastyczne)routes/ip3-parsers.js parseGenericCsvunitLIVE v1
SARIF (SAST/CI)JSON (OASIS SARIF)routes/ip3-sarif.jstests/ip3-sarif.unit.jsLIVE v1
SBOM (CycloneDX)JSONroutes/ip3-sbom.jstests/ip3-sbom.unit.jsLIVE v1
Reverse/malware (YARA/RE)JSONroutes/ip3-re.jstests/ip3-re.unit.jsLIVE v1

SDK jako pakiet — co jest ROADMAP

Poniżej dokładnie to, czego brakuje, żeby powyższe moduły stały się publicznie wydawanym SDK zamiast wewnętrznych plików serwera.

ElementOpisPriorytetStatus
Pakiet npm/CLISamodzielny pakiet do instalacji poza repo serwera, z wersjonowaniem semver.P1ROADMAP
Generator szkieletu konektoraCLI ip3 connector init tworzące szkielet parsera + fixture + test z szablonu.P1ROADMAP
Plugin registryRejestr zewnętrznych konektorów z podpisem/weryfikacją pochodzenia (supply-chain dla samych parserów).P2ROADMAP
Walidator kontraktuAutomatyczne sprawdzenie, że zwrócony Finding[] spełnia schemat (typ pól, wymagane title/severity).P1ROADMAP
Dokumentacja API referencyjna (typedoc)Wygenerowana dokumentacja z komentarzy kodu zamiast ręcznie pisanej specyfikacji.P2ROADMAP
Konektory push (SIEM/ticketing/BAS)Splunk, Sentinel, Jira, ServiceNow, MISP/OpenCTI, BAS — patrz /connectors po pełną listę i priorytety.P0/P1ROADMAP

Zasady bezpieczne dla nowych konektorów MVP

Import ≠ wykonanie testu MVP

Parser przyjmuje wynik narzędzia uruchomionego przez klienta w jego środowisku. Nigdy nie inicjuje skanu, nie wysyła pakietów do celu, nie zawiera exploitów.

Dane syntetyczne w fixture

Fixture testowe = dane demo/syntetyczne, bez rzeczywistych adresów/klientów. Zero payloadów ofensywnych w repo.

RoE przed przyjęciem źródła

Konektor przyjmuje dane wyłącznie w granicach pisemnych Rules of Engagement. Brak RoE = brak przyjęcia źródła.

Claim ≤ proof

Nowy parser jest „LIVE" dopiero z kodem + testem jednostkowym + (docelowo) endpointem importu — wcześniej to szkic/ROADMAP, nie funkcja.

Skrót

8
Parsery referencyjne LIVE v1
Burp·ZAP·Nessus·Qualys·generic·SARIF·SBOM·RE
6
Elementy SDK-jako-pakiet
wszystkie ROADMAP
1
Wspólny kontrakt
Finding[] — 7 pól
0
Payloadów ofensywnych
tylko parsowanie formatu
Czego ta strona NIE oznacza. Nie jest to ogłoszenie wydania pakietu SDK ani gotowego generatora konektorów. Opisany kontrakt jest wyprowadzony z faktycznie działającego kodu serwera (parsery LIVE v1) — to specyfikacja referencyjna, żeby przyszły konektor (własny albo partnera) mógł być zbudowany w tym samym kształcie, bez zgadywania interfejsu.
Granica etyczna i prawna. Konektory to warstwa importu dowodów defensywnych/GRC, nie narzędzie ofensywne. Żaden parser nie uruchamia skanu, exploitacji ani hack-back. Wszelkie mapowania priorytetów/terminów zgodności powiązane z importowanym ustaleniem to wsparcie decyzji (decision-support), nie porada prawna — kwalifikacja prawna wymaga przeglądu przez radcę/kancelarię.

Powiązane: pełna lista konektorów i formatów wymiany → /connectors · warstwa normalizacji (dedup/hash/severity) → /normalize · macierz statusów wszystkich elementów → /status-matrix.