augure 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +136 -0
  3. data/LICENSE +21 -0
  4. data/README.md +217 -0
  5. data/exe/augure +181 -0
  6. data/exe/augure-benchmark +67 -0
  7. data/home/runner/work/augure/augure/docs/agent-snippet.md +31 -0
  8. data/home/runner/work/augure/augure/docs/auditability.md +160 -0
  9. data/home/runner/work/augure/augure/docs/build-format.md +119 -0
  10. data/home/runner/work/augure/augure/docs/explanation-architecture.md +74 -0
  11. data/home/runner/work/augure/augure/docs/how-to-swap-solver.md +73 -0
  12. data/home/runner/work/augure/augure/docs/how-to-write-rules.md +71 -0
  13. data/home/runner/work/augure/augure/docs/pack-format.md +137 -0
  14. data/home/runner/work/augure/augure/docs/reference.md +293 -0
  15. data/home/runner/work/augure/augure/docs/tutorial.md +108 -0
  16. data/home/runner/work/augure/augure/examples/ret2win.facts +11 -0
  17. data/home/runner/work/augure/augure/examples/split.facts +12 -0
  18. data/home/runner/work/augure/augure/exe/augure +181 -0
  19. data/home/runner/work/augure/augure/exe/augure-benchmark +67 -0
  20. data/home/runner/work/augure/augure/lib/augure/bandit.rb +118 -0
  21. data/home/runner/work/augure/augure/lib/augure/coverage.rb +56 -0
  22. data/home/runner/work/augure/augure/lib/augure/ctf_corpus.json +773 -0
  23. data/home/runner/work/augure/augure/lib/augure/engine.rb +128 -0
  24. data/home/runner/work/augure/augure/lib/augure/facts.rb +194 -0
  25. data/home/runner/work/augure/augure/lib/augure/kb_corpus.json +345 -0
  26. data/home/runner/work/augure/augure/lib/augure/knowledge_base.rb +109 -0
  27. data/home/runner/work/augure/augure/lib/augure/mcts.rb +178 -0
  28. data/home/runner/work/augure/augure/lib/augure/pack.rb +244 -0
  29. data/home/runner/work/augure/augure/lib/augure/pack_loader.rb +93 -0
  30. data/home/runner/work/augure/augure/lib/augure/parity.rb +69 -0
  31. data/home/runner/work/augure/augure/lib/augure/pipeline.rb +107 -0
  32. data/home/runner/work/augure/augure/lib/augure/priors.rb +32 -0
  33. data/home/runner/work/augure/augure/lib/augure/rules.rb +300 -0
  34. data/home/runner/work/augure/augure/lib/augure/smt_process.rb +48 -0
  35. data/home/runner/work/augure/augure/lib/augure/verifier.rb +40 -0
  36. data/home/runner/work/augure/augure/lib/augure/version.rb +5 -0
  37. data/home/runner/work/augure/augure/lib/augure.rb +25 -0
  38. data/home/runner/work/augure/augure/packs/banner_leak.yml +46 -0
  39. data/home/runner/work/augure/augure/packs/brop.yml +46 -0
  40. data/home/runner/work/augure/augure/packs/fastbin_hook.yml +45 -0
  41. data/home/runner/work/augure/augure/packs/got_partial_overwrite.yml +45 -0
  42. data/home/runner/work/augure/augure/packs/got_partial_overwrite_deref.yml +39 -0
  43. data/home/runner/work/augure/augure/packs/house_botcake.yml +38 -0
  44. data/home/runner/work/augure/augure/packs/house_force.yml +37 -0
  45. data/home/runner/work/augure/augure/packs/house_of_apple2.yml +45 -0
  46. data/home/runner/work/augure/augure/packs/house_orange.yml +38 -0
  47. data/home/runner/work/augure/augure/packs/jop.yml +39 -0
  48. data/home/runner/work/augure/augure/packs/large_bin_attack.yml +39 -0
  49. data/home/runner/work/augure/augure/packs/one_gadget.yml +38 -0
  50. data/home/runner/work/augure/augure/packs/orw.yml +55 -0
  51. data/home/runner/work/augure/augure/packs/ret2csu_v2.yml +55 -0
  52. data/home/runner/work/augure/augure/packs/ret2dlresolve_x86.yml +39 -0
  53. data/home/runner/work/augure/augure/packs/ret2partial_overwrite.yml +38 -0
  54. data/home/runner/work/augure/augure/packs/ret2vdso.yml +39 -0
  55. data/home/runner/work/augure/augure/packs/setcontext_srop.yml +46 -0
  56. data/home/runner/work/augure/augure/packs/uaf_tcache.yml +45 -0
  57. data/home/runner/work/augure/augure/packs/unsorted_bin_attack.yml +38 -0
  58. metadata +103 -0
@@ -0,0 +1,773 @@
1
+ {
2
+ "meta": {
3
+ "captured_from": "strategy-sim (Python prototype), fallback engine",
4
+ "priors": {
5
+ "shellcode": [
6
+ 10.5,
7
+ 17.5
8
+ ],
9
+ "ret2libc": [
10
+ 14.3,
11
+ 25.7
12
+ ],
13
+ "rop": [
14
+ 19.5,
15
+ 20.5
16
+ ],
17
+ "fmtstr_write": [
18
+ 30.7,
19
+ 19.3
20
+ ],
21
+ "ret2plt": [
22
+ 31.7,
23
+ 8.3
24
+ ],
25
+ "ret2func": [
26
+ 16,
27
+ 4
28
+ ],
29
+ "srop": [
30
+ 20.0,
31
+ 20.0
32
+ ],
33
+ "dlresolve": [
34
+ 8.5,
35
+ 11.5
36
+ ],
37
+ "heap_fastbin": [
38
+ 7.0,
39
+ 13.0
40
+ ],
41
+ "heap_tcache": [
42
+ 15.7,
43
+ 14.3
44
+ ],
45
+ "heap_overwrite": [
46
+ 19.8,
47
+ 10.2
48
+ ],
49
+ "ret2plt_leak": [
50
+ 8,
51
+ 4
52
+ ],
53
+ "fmtstr_leak": [
54
+ 20.2,
55
+ 9.8
56
+ ],
57
+ "ret2csu": [
58
+ 21.5,
59
+ 8.5
60
+ ],
61
+ "stack_pivot": [
62
+ 20.0,
63
+ 10.0
64
+ ],
65
+ "got_overwrite": [
66
+ 19.5,
67
+ 10.5
68
+ ]
69
+ },
70
+ "mcts_iterations": 3000,
71
+ "mcts_seed": 42,
72
+ "vocabulary_extended": "iteration 2: fmtstr_leak, ret2dlresolve, ret2csu, stack_pivot, got_overwrite; Phoenix suite added"
73
+ },
74
+ "suites": {
75
+ "ropemporium": [
76
+ {
77
+ "suite": "ropemporium",
78
+ "name": "ret2win",
79
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").\ntarget_function(\"true\").",
80
+ "applicable": [
81
+ "ret2func"
82
+ ],
83
+ "ranked": [
84
+ [
85
+ "ret2func",
86
+ 0.8
87
+ ]
88
+ ],
89
+ "selected": "ret2func",
90
+ "truth": "ret2func"
91
+ },
92
+ {
93
+ "suite": "ropemporium",
94
+ "name": "split",
95
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"system\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\ngadget(\"pop_rdi_ret\", 4198400).\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").",
96
+ "applicable": [
97
+ "ret2plt",
98
+ "rop"
99
+ ],
100
+ "ranked": [
101
+ [
102
+ "ret2plt",
103
+ 0.7925
104
+ ],
105
+ [
106
+ "rop",
107
+ 0.4875
108
+ ]
109
+ ],
110
+ "selected": "ret2plt",
111
+ "truth": "ret2plt"
112
+ },
113
+ {
114
+ "suite": "ropemporium",
115
+ "name": "callme",
116
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"callme_one\").\nplt(\"callme_two\").\nplt(\"callme_three\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\nplt(\"exit\").\ngadget(\"pop_rdi_rsi_rdx_ret\", 4198400).\ngadget(\"pop_rdi_ret\", 4198400).\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").",
117
+ "applicable": [
118
+ "rop"
119
+ ],
120
+ "ranked": [
121
+ [
122
+ "rop",
123
+ 0.4875
124
+ ]
125
+ ],
126
+ "selected": "rop",
127
+ "truth": "rop"
128
+ },
129
+ {
130
+ "suite": "ropemporium",
131
+ "name": "write4",
132
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"print_file\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\ngadget(\"mov_deref_write\", 4198400).\ngadget(\"pop_r14_r15_ret\", 4198400).\ngadget(\"pop_rdi_ret\", 4198400).\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").",
133
+ "applicable": [
134
+ "rop"
135
+ ],
136
+ "ranked": [
137
+ [
138
+ "rop",
139
+ 0.4875
140
+ ]
141
+ ],
142
+ "selected": "rop",
143
+ "truth": "rop"
144
+ },
145
+ {
146
+ "suite": "ropemporium",
147
+ "name": "badchars",
148
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"print_file\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\ngadget(\"xor_byte\", 4198400).\ngadget(\"pop_r12_r13_r14_r15_ret\", 4198400).\ngadget(\"pop_rdi_ret\", 4198400).\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").",
149
+ "applicable": [
150
+ "rop"
151
+ ],
152
+ "ranked": [
153
+ [
154
+ "rop",
155
+ 0.4875
156
+ ]
157
+ ],
158
+ "selected": "rop",
159
+ "truth": "rop"
160
+ },
161
+ {
162
+ "suite": "ropemporium",
163
+ "name": "fluff",
164
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"print_file\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\ngadget(\"pop_rdi_ret\", 4198400).\ngadget(\"xlat_obscure\", 4198400).\ngadget(\"bextr_gadget\", 4198400).\ngadget(\"stosb_gadget\", 4198400).\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").",
165
+ "applicable": [
166
+ "rop"
167
+ ],
168
+ "ranked": [
169
+ [
170
+ "rop",
171
+ 0.4875
172
+ ]
173
+ ],
174
+ "selected": "rop",
175
+ "truth": "rop"
176
+ },
177
+ {
178
+ "suite": "ropemporium",
179
+ "name": "ret2csu",
180
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"ret2win\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\ngadget(\"csu_popper\", 4198400).\ngadget(\"csu_mov\", 4198400).\ngadget(\"pop_rdi_ret\", 4198400).\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").",
181
+ "applicable": [
182
+ "rop",
183
+ "ret2csu"
184
+ ],
185
+ "ranked": [
186
+ [
187
+ "ret2csu",
188
+ 0.7166666667
189
+ ],
190
+ [
191
+ "rop",
192
+ 0.4875
193
+ ]
194
+ ],
195
+ "selected": "ret2csu",
196
+ "truth": "ret2csu",
197
+ "truth_update": "the documented intended technique is ret2csu (__libc_csu_init popper/mov, official ROP Emporium solution); the previous vocabulary collapsed it into rop"
198
+ },
199
+ {
200
+ "suite": "ropemporium",
201
+ "name": "pivot",
202
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"foothold_function\").\nplt(\"puts\").\nplt(\"memset\").\nplt(\"read\").\nplt(\"printf\").\nplt(\"exit\").\ngadget(\"pop_rax_ret\", 4198400).\ngadget(\"xchg_rsp_rax\", 4198400).\ngadget(\"pop_rdi_ret\", 4198400).\ngadget(\"mov_rax_deref\", 4198400).\ngadget(\"add_rax\", 4198400).\ngadget(\"call_rax\", 4198400).\ngadget(\"ret_align\", 4198400).\nvuln_hint(\"unsafe_func:gets\").\nlimited_stack(\"true\").\n",
203
+ "applicable": [
204
+ "rop",
205
+ "stack_pivot"
206
+ ],
207
+ "ranked": [
208
+ [
209
+ "stack_pivot",
210
+ 0.6666666667
211
+ ],
212
+ [
213
+ "rop",
214
+ 0.4875
215
+ ]
216
+ ],
217
+ "selected": "stack_pivot",
218
+ "truth": "stack_pivot",
219
+ "truth_update": "the documented intended technique is stack_pivot (xchg rsp,rax onto a second chain because the stack does not fit it, official ROP Emporium solution); the previous vocabulary collapsed it into rop"
220
+ }
221
+ ],
222
+ "protostar": [
223
+ {
224
+ "suite": "protostar",
225
+ "name": "stack4",
226
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"printf\").\nplt(\"gets\").\nvuln_hint(\"unsafe_func:gets\").\ntarget_function(\"true\").",
227
+ "applicable": [
228
+ "shellcode",
229
+ "ret2func"
230
+ ],
231
+ "ranked": [
232
+ [
233
+ "ret2func",
234
+ 0.8
235
+ ],
236
+ [
237
+ "shellcode",
238
+ 0.375
239
+ ]
240
+ ],
241
+ "selected": "ret2func",
242
+ "truth": "ret2func"
243
+ },
244
+ {
245
+ "suite": "protostar",
246
+ "name": "stack5",
247
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"gets\").\nvuln_hint(\"unsafe_func:gets\").",
248
+ "applicable": [
249
+ "shellcode"
250
+ ],
251
+ "ranked": [
252
+ [
253
+ "shellcode",
254
+ 0.375
255
+ ]
256
+ ],
257
+ "selected": "shellcode",
258
+ "truth": "shellcode"
259
+ },
260
+ {
261
+ "suite": "protostar",
262
+ "name": "stack6",
263
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"gets\").\nplt(\"puts\").\nplt(\"strdup\").\ngadget(\"ret_align\", 134513664).\nvuln_hint(\"unsafe_func:gets\").\nlibc_present(\"true\").\nreturn_addr_filtered(\"true\").",
264
+ "applicable": [
265
+ "ret2libc"
266
+ ],
267
+ "ranked": [
268
+ [
269
+ "ret2libc",
270
+ 0.3575
271
+ ]
272
+ ],
273
+ "selected": "ret2libc",
274
+ "truth": "ret2libc"
275
+ },
276
+ {
277
+ "suite": "protostar",
278
+ "name": "stack7",
279
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"gets\").\nplt(\"puts\").\nplt(\"strdup\").\nplt(\"printf\").\ngadget(\"ret_align\", 134513664).\ngadget(\"pop_ret\", 134513664).\nvuln_hint(\"unsafe_func:gets\").\nlibc_present(\"true\").\nreturn_addr_filtered(\"true\").",
280
+ "applicable": [
281
+ "ret2libc"
282
+ ],
283
+ "ranked": [
284
+ [
285
+ "ret2libc",
286
+ 0.3575
287
+ ]
288
+ ],
289
+ "selected": "ret2libc",
290
+ "truth": "ret2libc"
291
+ },
292
+ {
293
+ "suite": "protostar",
294
+ "name": "format0",
295
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"printf\").\nplt(\"sprintf\").\nvuln_hint(\"unsafe_func:printf\").",
296
+ "applicable": [
297
+ "fmtstr_write"
298
+ ],
299
+ "ranked": [
300
+ [
301
+ "fmtstr_write",
302
+ 0.614
303
+ ]
304
+ ],
305
+ "selected": "fmtstr_write",
306
+ "truth": "fmtstr_write"
307
+ },
308
+ {
309
+ "suite": "protostar",
310
+ "name": "format4",
311
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"printf\").\nplt(\"fgets\").\nplt(\"exit\").\nplt(\"puts\").\nvuln_hint(\"unsafe_func:printf\").\ngot_overwrite_target(\"true\").",
312
+ "applicable": [
313
+ "fmtstr_write",
314
+ "got_overwrite"
315
+ ],
316
+ "ranked": [
317
+ [
318
+ "got_overwrite",
319
+ 0.65
320
+ ],
321
+ [
322
+ "fmtstr_write",
323
+ 0.614
324
+ ]
325
+ ],
326
+ "selected": "got_overwrite",
327
+ "truth": "got_overwrite",
328
+ "truth_update": "protostar format4's documented goal is the GOT write (%n on printf's GOT, official hints and write-ups); the previous vocabulary only had fmtstr_write for it"
329
+ },
330
+ {
331
+ "suite": "protostar",
332
+ "name": "heap0",
333
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"malloc\").\nplt(\"strcpy\").\nplt(\"printf\").\nvuln(\"heap\").\nfunction_pointer_on_heap(\"true\").\nallocator(\"dlmalloc\").",
334
+ "applicable": [
335
+ "heap_overwrite"
336
+ ],
337
+ "ranked": [
338
+ [
339
+ "heap_overwrite",
340
+ 0.66
341
+ ]
342
+ ],
343
+ "selected": "heap_overwrite",
344
+ "truth": "heap_overwrite"
345
+ },
346
+ {
347
+ "suite": "protostar",
348
+ "name": "heap1",
349
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\nplt(\"malloc\").\nplt(\"strcpy\").\nplt(\"puts\").\nvuln(\"heap\").\ngot_overwrite_target(\"true\").\nallocator(\"dlmalloc\").",
350
+ "applicable": [
351
+ "heap_overwrite"
352
+ ],
353
+ "ranked": [
354
+ [
355
+ "heap_overwrite",
356
+ 0.66
357
+ ]
358
+ ],
359
+ "selected": "heap_overwrite",
360
+ "truth": "heap_overwrite"
361
+ },
362
+ {
363
+ "suite": "protostar",
364
+ "name": "format1",
365
+ "facts": "vuln(\"fmtstr\").\nfmtstr_read(\"true\").\nrelro(\"none\").\n",
366
+ "truth": "fmtstr_leak",
367
+ "applicable": [
368
+ "fmtstr_write",
369
+ "fmtstr_leak"
370
+ ],
371
+ "ranked": [
372
+ [
373
+ "fmtstr_leak",
374
+ 0.6733333333
375
+ ],
376
+ [
377
+ "fmtstr_write",
378
+ 0.614
379
+ ]
380
+ ],
381
+ "selected": "fmtstr_leak"
382
+ }
383
+ ],
384
+ "pwnable": [
385
+ {
386
+ "suite": "pwnable",
387
+ "name": "unlink",
388
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"malloc\").\nplt(\"memcpy\").\nplt(\"printf\").\nvuln(\"heap\").\nallocator(\"dlmalloc\").\ngot_overwrite_target(\"true\").",
389
+ "applicable": [
390
+ "heap_overwrite"
391
+ ],
392
+ "ranked": [
393
+ [
394
+ "heap_overwrite",
395
+ 0.66
396
+ ]
397
+ ],
398
+ "selected": "heap_overwrite",
399
+ "truth": "heap_overwrite"
400
+ },
401
+ {
402
+ "suite": "pwnable",
403
+ "name": "tcache_tear",
404
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"true\").\nrelro(\"full\").\nplt(\"malloc\").\nplt(\"free\").\nplt(\"printf\").\nplt(\"read\").\nvuln(\"heap\").\nlibc_present(\"true\").\nallocator(\"tcache\").\nglibc_minor(26).",
405
+ "applicable": [
406
+ "heap_tcache"
407
+ ],
408
+ "ranked": [
409
+ [
410
+ "heap_tcache",
411
+ 0.5233333333
412
+ ]
413
+ ],
414
+ "selected": "heap_tcache",
415
+ "truth": "heap_tcache"
416
+ },
417
+ {
418
+ "suite": "pwnable",
419
+ "name": "realloc",
420
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"true\").\nrelro(\"full\").\nplt(\"realloc\").\nplt(\"printf\").\nplt(\"atoll\").\nplt(\"read\").\nvuln(\"heap\").\nlibc_present(\"true\").\nallocator(\"tcache\").\ngot_overwrite_target(\"true\").\nglibc_minor(28).",
421
+ "applicable": [
422
+ "heap_tcache"
423
+ ],
424
+ "ranked": [
425
+ [
426
+ "heap_tcache",
427
+ 0.5233333333
428
+ ]
429
+ ],
430
+ "selected": "heap_tcache",
431
+ "truth": "heap_tcache"
432
+ },
433
+ {
434
+ "suite": "pwnable",
435
+ "name": "calc",
436
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"true\").\nrelro(\"partial\").\nplt(\"printf\").\nplt(\"read\").\nplt(\"exit\").\nplt(\"signal\").\ngadget(\"pop_edx_ret\", 134513664).\ngadget(\"pop_eax_ret\", 134513664).\ngadget(\"int80\", 134513664).\ngadget(\"ret_align\", 134513664).\nvuln_hint(\"unsafe_func:gets\").\nlibc_present(\"true\").",
437
+ "applicable": [
438
+ "ret2libc",
439
+ "rop"
440
+ ],
441
+ "ranked": [
442
+ [
443
+ "rop",
444
+ 0.4875
445
+ ],
446
+ [
447
+ "ret2libc",
448
+ 0.3575
449
+ ]
450
+ ],
451
+ "selected": "rop",
452
+ "truth": "rop"
453
+ },
454
+ {
455
+ "suite": "pwnable",
456
+ "name": "orw",
457
+ "facts": "nx(\"false\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"read\").\nplt(\"printf\").\nvuln_hint(\"unsafe_func:gets\").\nseccomp(\"true\").\nshellcode_input(\"true\").",
458
+ "applicable": [],
459
+ "ranked": [],
460
+ "selected": null,
461
+ "truth": "orw",
462
+ "pack_verdict": "orw"
463
+ },
464
+ {
465
+ "suite": "pwnable",
466
+ "name": "old_dayz",
467
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nplt(\"malloc\").\nplt(\"free\").\nplt(\"printf\").\nplt(\"read\").\nvuln(\"heap\").\nlibc_present(\"true\").\nallocator(\"ptmalloc2\").\nglibc_minor(23).",
468
+ "applicable": [
469
+ "heap_fastbin"
470
+ ],
471
+ "ranked": [
472
+ [
473
+ "heap_fastbin",
474
+ 0.35
475
+ ]
476
+ ],
477
+ "selected": "heap_fastbin",
478
+ "truth": "heap_fastbin"
479
+ },
480
+ {
481
+ "suite": "pwnable",
482
+ "name": "smallest",
483
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\ngadget(\"syscall\", 134513664).\nvuln_hint(\"unsafe_func:gets\").\nsigreturn_frame(\"true\").",
484
+ "applicable": [
485
+ "srop"
486
+ ],
487
+ "ranked": [
488
+ [
489
+ "srop",
490
+ 0.5
491
+ ]
492
+ ],
493
+ "selected": "srop",
494
+ "truth": "srop"
495
+ },
496
+ {
497
+ "suite": "pwnable",
498
+ "name": "sick_rop",
499
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"none\").\ngadget(\"syscall\", 134513664).\nvuln_hint(\"unsafe_func:gets\").\nsigreturn_frame(\"true\").",
500
+ "applicable": [
501
+ "srop"
502
+ ],
503
+ "ranked": [
504
+ [
505
+ "srop",
506
+ 0.5
507
+ ]
508
+ ],
509
+ "selected": "srop",
510
+ "truth": "srop"
511
+ }
512
+ ],
513
+ "phoenix": [
514
+ {
515
+ "suite": "phoenix",
516
+ "name": "stack-three",
517
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln_hint(\"unsafe_func:strcpy\").\ntarget_function(\"true\").\n",
518
+ "truth": "ret2func",
519
+ "applicable": [
520
+ "ret2func"
521
+ ],
522
+ "ranked": [
523
+ [
524
+ "ret2func",
525
+ 0.8
526
+ ]
527
+ ],
528
+ "selected": "ret2func"
529
+ },
530
+ {
531
+ "suite": "phoenix",
532
+ "name": "stack-five",
533
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln_hint(\"unsafe_func:gets\").\nnx(\"false\").\nshellcode_input(\"true\").\n",
534
+ "truth": "shellcode",
535
+ "applicable": [
536
+ "shellcode"
537
+ ],
538
+ "ranked": [
539
+ [
540
+ "shellcode",
541
+ 0.375
542
+ ]
543
+ ],
544
+ "selected": "shellcode"
545
+ },
546
+ {
547
+ "suite": "phoenix",
548
+ "name": "format-one",
549
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln(\"fmtstr\").\n",
550
+ "truth": "fmtstr_write",
551
+ "applicable": [
552
+ "fmtstr_write"
553
+ ],
554
+ "ranked": [
555
+ [
556
+ "fmtstr_write",
557
+ 0.614
558
+ ]
559
+ ],
560
+ "selected": "fmtstr_write"
561
+ },
562
+ {
563
+ "suite": "phoenix",
564
+ "name": "format-two",
565
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln(\"fmtstr\").\n",
566
+ "truth": "fmtstr_write",
567
+ "applicable": [
568
+ "fmtstr_write"
569
+ ],
570
+ "ranked": [
571
+ [
572
+ "fmtstr_write",
573
+ 0.614
574
+ ]
575
+ ],
576
+ "selected": "fmtstr_write"
577
+ },
578
+ {
579
+ "suite": "phoenix",
580
+ "name": "format-three",
581
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln(\"fmtstr\").\n",
582
+ "truth": "fmtstr_write",
583
+ "applicable": [
584
+ "fmtstr_write"
585
+ ],
586
+ "ranked": [
587
+ [
588
+ "fmtstr_write",
589
+ 0.614
590
+ ]
591
+ ],
592
+ "selected": "fmtstr_write"
593
+ },
594
+ {
595
+ "suite": "phoenix",
596
+ "name": "format-four",
597
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln(\"fmtstr\").\ngot_overwrite_target(\"true\").\n",
598
+ "truth": "got_overwrite",
599
+ "applicable": [
600
+ "fmtstr_write",
601
+ "got_overwrite"
602
+ ],
603
+ "ranked": [
604
+ [
605
+ "got_overwrite",
606
+ 0.65
607
+ ],
608
+ [
609
+ "fmtstr_write",
610
+ 0.614
611
+ ]
612
+ ],
613
+ "selected": "got_overwrite"
614
+ },
615
+ {
616
+ "suite": "phoenix",
617
+ "name": "heap-zero",
618
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln(\"heap\").\nfunction_pointer_on_heap(\"true\").\nglibc_minor(27).\n",
619
+ "truth": "heap_overwrite",
620
+ "applicable": [
621
+ "heap_tcache",
622
+ "heap_overwrite"
623
+ ],
624
+ "ranked": [
625
+ [
626
+ "heap_overwrite",
627
+ 0.66
628
+ ],
629
+ [
630
+ "heap_tcache",
631
+ 0.5233333333
632
+ ]
633
+ ],
634
+ "selected": "heap_overwrite"
635
+ },
636
+ {
637
+ "suite": "phoenix",
638
+ "name": "heap-one",
639
+ "facts": "nx(\"true\").\npie(\"false\").\ncanary(\"false\").\nrelro(\"partial\").\nvuln(\"heap\").\nfunction_pointer_on_heap(\"true\").\nglibc_minor(27).\n",
640
+ "truth": "heap_overwrite",
641
+ "applicable": [
642
+ "heap_tcache",
643
+ "heap_overwrite"
644
+ ],
645
+ "ranked": [
646
+ [
647
+ "heap_overwrite",
648
+ 0.66
649
+ ],
650
+ [
651
+ "heap_tcache",
652
+ 0.5233333333
653
+ ]
654
+ ],
655
+ "selected": "heap_overwrite"
656
+ }
657
+ ]
658
+ },
659
+ "mcts": [
660
+ {
661
+ "name": "nx_pie_fmtstr_libc",
662
+ "allowed": [
663
+ "fmtstr_leak",
664
+ "ret2libc",
665
+ "rop",
666
+ "rop_nocontext"
667
+ ],
668
+ "documented_first": "fmtstr_leak",
669
+ "documented_chain": [
670
+ "fmtstr_leak",
671
+ "ret2libc"
672
+ ],
673
+ "python_first": "fmtstr_leak",
674
+ "python_path": [
675
+ "fmtstr_leak",
676
+ "ret2libc"
677
+ ],
678
+ "source": "generic CTF (fmtstr -> ret2libc), e.g. protostar-style",
679
+ "external": false
680
+ },
681
+ {
682
+ "name": "nx_off_winfunc",
683
+ "allowed": [
684
+ "ret2plt",
685
+ "shellcode"
686
+ ],
687
+ "documented_first": "shellcode",
688
+ "documented_chain": [
689
+ "shellcode"
690
+ ],
691
+ "python_first": "shellcode",
692
+ "python_path": [
693
+ "shellcode"
694
+ ],
695
+ "source": "protostar stack5 (NX off, shellcode)",
696
+ "external": false
697
+ },
698
+ {
699
+ "name": "nx_pie_ret2plt_leak",
700
+ "allowed": [
701
+ "ret2libc",
702
+ "ret2plt_leak",
703
+ "rop",
704
+ "rop_nocontext"
705
+ ],
706
+ "documented_first": "ret2plt_leak",
707
+ "documented_chain": [
708
+ "ret2plt_leak",
709
+ "ret2libc"
710
+ ],
711
+ "python_first": "ret2plt_leak",
712
+ "python_path": [
713
+ "ret2plt_leak",
714
+ "ret2libc"
715
+ ],
716
+ "source": "phoenix stack7-style (puts leak -> ret2libc)",
717
+ "external": false
718
+ },
719
+ {
720
+ "name": "pivot_then_chain",
721
+ "allowed": [
722
+ "ret2libc_big",
723
+ "ret2plt_leak_big",
724
+ "stack_pivot"
725
+ ],
726
+ "documented_first": "stack_pivot",
727
+ "documented_chain": [
728
+ "stack_pivot",
729
+ "ret2plt_leak_big",
730
+ "ret2libc_big"
731
+ ],
732
+ "python_first": "stack_pivot",
733
+ "python_path": [
734
+ "stack_pivot",
735
+ "ret2plt_leak_big",
736
+ "ret2libc_big"
737
+ ],
738
+ "source": "ROP Emporium pivot (stack pivot -> chain)",
739
+ "external": false
740
+ },
741
+ {
742
+ "name": "pintheft_kernel",
743
+ "allowed": [
744
+ "io_uring_register",
745
+ "io_uring_write",
746
+ "page_free",
747
+ "pagecache_reclaim",
748
+ "rds_pin_steal",
749
+ "suid_exec"
750
+ ],
751
+ "documented_first": "io_uring_register",
752
+ "documented_chain": [
753
+ "io_uring_register",
754
+ "rds_pin_steal",
755
+ "page_free",
756
+ "pagecache_reclaim",
757
+ "io_uring_write",
758
+ "suid_exec"
759
+ ],
760
+ "python_first": "io_uring_register",
761
+ "python_path": [
762
+ "io_uring_register",
763
+ "rds_pin_steal",
764
+ "page_free",
765
+ "pagecache_reclaim",
766
+ "io_uring_write",
767
+ "suid_exec"
768
+ ],
769
+ "source": "PinTheft, V12 Security (RDS zerocopy double-free privesc)",
770
+ "external": true
771
+ }
772
+ ]
773
+ }