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}