|
94 | 94 | submissionIds = list(set(submissionIds).intersection(publicSheet.keys())) |
95 | 95 | submissionIds.sort() |
96 | 96 |
|
| 97 | +# Regular expression to handle kernelCTF flag without signature |
| 98 | +flagRegex = r"kernelCTF\{(?:[^:]+:)?(?:v1:([^:]+)|v2:([^:]+):([^:]*)):\d+\}" |
| 99 | +def flagTarget(flag): |
| 100 | + match = checkRegex(flag, flagRegex, f"The flag (`{flag}`) is invalid") |
| 101 | + if match.group(1): |
| 102 | + # v1 flag |
| 103 | + return match.group(1) |
| 104 | + |
| 105 | + # v2 flag |
| 106 | + return match.group(2) |
| 107 | + |
| 108 | +targetFlagTimes = {} |
97 | 109 | flags = [] |
98 | 110 | for submissionId in submissionIds: |
99 | 111 | publicData = publicSheet[submissionId] |
|
116 | 128 | else: |
117 | 129 | print(f"[+] The hash of the file `{archiveFn}` matches the expected `{exploitHash}` value.") |
118 | 130 |
|
119 | | - flags.extend(publicData["Flags"].strip().split('\n')) |
| 131 | + for flag in publicData["Flags"].strip().split('\n'): |
| 132 | + flags.append(flag) |
| 133 | + targetFlagTimes[flagTarget(flag)] = publicData["Flag submission time"] |
120 | 134 |
|
121 | 135 | if cve != publicData["CVE"]: |
122 | 136 | error(f"The CVE on the public spreadsheet for submission `{submissionId}` is `{publicData['CVE']}` but the PR is for `{cve}`.") |
123 | 137 |
|
124 | | -# Regular expression to handle kernelCTF flag without signature |
125 | | -flagRegex = r"kernelCTF\{(?:[^:]+:)?(?:v1:([^:]+)|v2:([^:]+):([^:]*)):\d+\}" |
126 | | -def flagTarget(flag): |
127 | | - match = checkRegex(flag, flagRegex, f"The flag (`{flag}`) is invalid") |
128 | | - if match.group(1): |
129 | | - # v1 flag |
130 | | - return match.group(1) |
131 | | - |
132 | | - # v2 flag |
133 | | - return match.group(2) |
134 | | - |
135 | 138 | flagTargets = set([flagTarget(flag) for flag in flags]) |
136 | 139 | if "mitigation-6.1-v2" in flagTargets: |
137 | 140 | flagTargets = flagTargets - {"mitigation-6.1-v2"} | {"mitigation-6.1"} |
@@ -160,6 +163,7 @@ def summary(success, text): |
160 | 163 | exploit_info = metadata["exploits"].get(target) |
161 | 164 | if not exploit_info: continue |
162 | 165 | exploits_info[target] = { key: exploit_info[key] for key in ["uses", "requires_separate_kaslr_leak"] if key in exploit_info } |
| 166 | + exploits_info[target]["flag_time"] = targetFlagTimes[target] |
163 | 167 | ghSet("OUTPUT", f"exploits_info={json.dumps(exploits_info)}") |
164 | 168 | ghSet("OUTPUT", f"artifact_backup_dir={'_'.join(submissionIds)}") |
165 | 169 |
|
|
0 commit comments