security(windows): honoreert native git op Windows sslCAInfo/curloptResolve? (NetGuard-pin op de subproces-weg) #934
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#934
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Afgesplitst van #926 als open beveiligingsvraag die daar niet te beantwoorden was.
De vraag
De NetGuard-belofte op de native git-weg (subproces-git) leunt erop dat git twee configuraties daadwerkelijk honoreert:
http.sslCAInfo— een zelfondertekend certificaat als geldig anker, mét behoud van de naamcontrole (cert-pinning);http.curloptResolve— de bestemming pinnen op een goedgekeurd adres (host-pinning), plushttp.followRedirects=false.Op macOS/Linux is dit getoetst met echte git tegen een lokale HTTPS-testserver (
git_native_cert_pin_test.dart,git_network_guard_test.dart). Op Windows komt die verbinding op de CI-runner niet eens tot stand, en gebruikt git doorgaans schannel in plaats van openssl/curl — waarsslCAInfo(een CA-bestand) anders of niet werkt, en waarcurloptResolveeen curl-optie is die van de gekozen http-backend afhangt.In #928 zijn die twee echt-server-tests daarom op Windows overgeslagen mét reden. De argv/config die de app meegeeft is op Windows wél gedekt door de zustertests; wat níet geverifieerd is, is of gít zich er op Windows aan houdt.
Wat nodig is
Verificatie op een echte Windows-machine (niet enkel de CI groen maken): welke http-backend gebruikt de meegeleverde/gangbare git op Windows, en honoreert die
sslCAInfoencurloptResolve? Zo niet, dan is de pin op de native git-weg op Windows een papieren maatregel en moet er een schannel-equivalent (of een andere afdwinging) komen.Geen acute lekkage: de app draait de native git-weg alleen bij een expliciet ingerichte git-opslag, en de overige guards (schema-weigering, privaat-adres-blokkade, geen token over plat http) gelden platformbreed.
Opgelost en op main.
curloptResolve (host-pin): git honoreert dit óók op Windows — het is een libcurl-optie (CURLOPT_RESOLVE), los van de TLS-backend. Dat de echt-server-toets eerder "niet verbond" op de Windows-CI lag aan de omgeving van díe test (geen
SystemRoot→ geen socket-DLL), niet aan git.sslCAInfo (cert-pin): dít was op Windows wél een papieren maatregel. Git-for-Windows kiest standaard schannel, en die negeert
http.sslCAInfo(de installer haalt hem er zelfs uit). Opgelost door op de gepinde weg de openssl-backend te forceren (pinnedCertBackendConfig), zodat git tegen precies ons CA-bestand valideert — het gedrag dat op macOS/Linux al bewezen was. Alleen op de gepinde weg; een publieke-CA-server houdt schannel + de Windows-certificaatlade.De twee echt-server-toetsen draaien nu óók op windows-2022 (met een Windows-correcte omgeving) in plaats van overgeslagen. Empirisch groen op de runner:
git_native_cert_pin_test: git accepteert het certificaat met sslCAInfo, en zonder nietgit_network_guard_test: curloptResolve verlegt de bestemmingOp main in
cc359f2a(fix + SECURITY_DESIGN §10) en4d649110(Windows-CI-toetsen + unit test). CI-run: https://github.com/brennodewinter/Ocideck/actions/runs/30317415087