code wiki / _hdl_build / nx_browser_game_marker_gate.nx

nx_browser_game_marker_gate.nx source

↩ module page · 93 lines · 4365 B

1// nx_browser_game_marker_gate.nx -- proves the nishi-game marker extraction is BOTH correct on the 2// real emitted pages AND fail-closed against hostile ones. The marker value is page-controlled and 3// becomes an exec path in br_launch_game, so the adversarial teeth are the point: traversal bytes, 4// wrong prefix, uppercase, unterminated strings must ALL yield 0 -- reject, never truncate-accept. 5// license_tier: ORIGINAL expect_exit: 0 6import "nx_browser.nx" 7 8func gw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 9func gn(v: i64) -> i64 { 10 let t: *u8 = sys_mmap(32) as *u8 11 var m: i64 = v; var w: i64 = 0 12 if m<0 { t[w]=45 as u8; w=w+1; m=0-m } 13 if m==0 { t[w]=48 as u8; sys_write(1,t,w+1); return 0 } 14 let d: *u8 = sys_mmap(32) as *u8 15 var k: i64=0 16 while m>0 { d[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } 17 var j: i64=0 18 while j<k { t[w]=d[k-1-j]; w=w+1; j=j+1 } 19 sys_write(1,t,w); return 0 20} 21func gs_eq(a: *u8, alen: i64, b: *u8) -> i64 { 22 var n: i64 = 0 23 while b[n] != (0 as u8) { n = n + 1 } 24 if alen != n { return 0 } 25 var i: i64 = 0 26 while i < n { if (a[i] & 0xff) != (b[i] & 0xff) { return 0 } i = i + 1 } 27 return 1 28} 29func try(html: *u8, out: *u8) -> i64 { 30 var n: i64 = 0 31 while html[n] != (0 as u8) { n = n + 1 } 32 return br_game_organ(html, n, out) 33} 34 35func main() -> i64 { 36 var pass: i64 = 0 37 let total: i64 = 7 38 let out: *u8 = sys_mmap(128) 39 gw("=== nishi-game marker gate (correct on real pages, fail-closed on hostile ones) ===\n" as *u8) 40 41 // T1 the REAL emitted craft page names its native client 42 let lp: *i64 = sys_mmap(16) as *i64 43 let craft: *u8 = sys_read_file("knowledge/nx_wasm_craft.html\x00" as *u8, lp) 44 var g1: i64 = 0 45 if lp[0] > 1000 { g1 = br_game_organ(craft, lp[0], out) } 46 gw("T1 craft page bytes=" as *u8); gn(lp[0]); gw(" organ-len=" as *u8); gn(g1); gw("\n" as *u8) 47 if g1 == 16 { if gs_eq(out, g1, "nx_desktop_craft\x00" as *u8) == 1 { pass = pass + 1 } } 48 49 // T2 the REAL emitted breeders page too 50 let breed: *u8 = sys_read_file("knowledge/nx_wasm_breeders.html\x00" as *u8, lp) 51 var g2: i64 = 0 52 if lp[0] > 1000 { g2 = br_game_organ(breed, lp[0], out) } 53 gw("T2 breeders organ-len=" as *u8); gn(g2); gw("\n" as *u8) 54 if g2 == 19 { if gs_eq(out, g2, "nx_desktop_breeders\x00" as *u8) == 1 { pass = pass + 1 } } 55 56 // T3 a page with NO marker yields 0 57 let plain: *u8 = "<html><head><title>x</title></head><body>hello</body></html>\x00" as *u8 58 let g3: i64 = try(plain, out) 59 gw("T3 no-marker -> " as *u8); gn(g3); gw("\n" as *u8) 60 if g3 == 0 { pass = pass + 1 } 61 62 // T4 TRAVERSAL: slash/dot bytes reject the WHOLE marker (no truncate-accept of a prefix) 63 let evil1: *u8 = "<meta name=\"nishi-game\" content=\"nx_a/../../bin/sh\">\x00" as *u8 64 let g4: i64 = try(evil1, out) 65 gw("T4 traversal -> " as *u8); gn(g4); gw("\n" as *u8) 66 if g4 == 0 { pass = pass + 1 } 67 68 // T5 wrong prefix / uppercase both rejected 69 let evil2: *u8 = "<meta name=\"nishi-game\" content=\"desktop_craft\">\x00" as *u8 70 let evil3: *u8 = "<meta name=\"nishi-game\" content=\"nx_Craft\">\x00" as *u8 71 let g5a: i64 = try(evil2, out) 72 let g5b: i64 = try(evil3, out) 73 gw("T5 wrong-prefix=" as *u8); gn(g5a); gw(" uppercase=" as *u8); gn(g5b); gw("\n" as *u8) 74 if g5a == 0 { if g5b == 0 { pass = pass + 1 } } 75 76 // T6 unterminated content string cannot overrun or accept 77 let evil4: *u8 = "<meta name=\"nishi-game\" content=\"nx_desktop_cra\x00" as *u8 78 let g6: i64 = try(evil4, out) 79 gw("T6 unterminated -> " as *u8); gn(g6); gw("\n" as *u8) 80 if g6 == 0 { pass = pass + 1 } 81 82 // T7 a valid synthetic marker parses (the positive control for T4-T6's rejections) 83 let good: *u8 = "<head><meta name=\"nishi-game\" content=\"nx_desktop_zz9\"></head>\x00" as *u8 84 let g7: i64 = try(good, out) 85 gw("T7 synthetic valid -> " as *u8); gn(g7); gw("\n" as *u8) 86 if g7 == 14 { if gs_eq(out, g7, "nx_desktop_zz9\x00" as *u8) == 1 { pass = pass + 1 } } 87 88 gw("nx_browser_game_marker_gate: " as *u8); gn(pass); gw("/" as *u8); gn(total); gw("\n" as *u8) 89 if pass == total { gw("VERDICT GREEN -- marker exact on real pages, fail-closed on hostile ones\n" as *u8); sys_exit(0) } 90 gw("VERDICT RED\n" as *u8) 91 sys_exit(1) 92 return 0 93}