Commit 7af6233
committed
security(owners): enforce OWNERS files read from PR base branch using worktrees
Critical security fix to prevent PRs from modifying their own approval requirements.
Previously, OWNERS files were read from the main repository clone, which could be
influenced by PR content. This created a security vulnerability where a malicious
PR could:
- Modify OWNERS files in changed directories
- Change who can approve the PR
- Potentially bypass approval requirements
Solution:
- Use git worktree to create isolated checkout of PR's base branch (target branch)
- Always read OWNERS files from base branch, not PR head branch
- Ensures approval requirements cannot be modified by PR content
- Maintains performance by using existing worktree helper
Changes:
- Modified get_all_repository_approvers_and_reviewers() to accept branch parameter
- Integrated git_worktree_checkout for isolated base branch access
- Updated _get_file_content_from_local() to support custom base paths
- Enhanced file discovery to skip hidden directories in worktree
- Updated all tests to mock worktree creation
Impact:
- Security: PRs cannot modify their own approval requirements
- Performance: Minimal overhead (worktree creation is fast)
- Reliability: Fail-fast on worktree creation failures1 parent be8dcd3 commit 7af6233
File tree
4 files changed
+169
-59
lines changed- webhook_server
- libs/handlers
- tests
4 files changed
+169
-59
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
35 | 39 | | |
36 | 40 | | |
37 | 41 | | |
38 | | - | |
| 42 | + | |
39 | 43 | | |
40 | 44 | | |
41 | 45 | | |
| |||
106 | 110 | | |
107 | 111 | | |
108 | 112 | | |
109 | | - | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
110 | 116 | | |
111 | 117 | | |
112 | 118 | | |
113 | 119 | | |
| 120 | + | |
114 | 121 | | |
115 | 122 | | |
116 | 123 | | |
117 | 124 | | |
118 | | - | |
| 125 | + | |
| 126 | + | |
119 | 127 | | |
120 | 128 | | |
121 | 129 | | |
| |||
137 | 145 | | |
138 | 146 | | |
139 | 147 | | |
140 | | - | |
| 148 | + | |
141 | 149 | | |
142 | 150 | | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
148 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
149 | 159 | | |
150 | 160 | | |
151 | 161 | | |
152 | 162 | | |
153 | 163 | | |
154 | 164 | | |
155 | 165 | | |
156 | | - | |
157 | | - | |
158 | | - | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
159 | 180 | | |
160 | | - | |
161 | | - | |
162 | | - | |
| 181 | + | |
| 182 | + | |
163 | 183 | | |
164 | | - | |
| 184 | + | |
| 185 | + | |
165 | 186 | | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
171 | 194 | | |
172 | | - | |
173 | | - | |
174 | | - | |
| 195 | + | |
175 | 196 | | |
176 | | - | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
177 | 202 | | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
182 | 206 | | |
183 | | - | |
| 207 | + | |
184 | 208 | | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
191 | | - | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
192 | 213 | | |
193 | | - | |
194 | | - | |
195 | | - | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
196 | 227 | | |
197 | 228 | | |
198 | 229 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
4 | 6 | | |
5 | 7 | | |
6 | 8 | | |
| |||
74 | 76 | | |
75 | 77 | | |
76 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
77 | 94 | | |
78 | 95 | | |
79 | 96 | | |
| |||
218 | 235 | | |
219 | 236 | | |
220 | 237 | | |
| 238 | + | |
221 | 239 | | |
222 | 240 | | |
223 | 241 | | |
| |||
262 | 280 | | |
263 | 281 | | |
264 | 282 | | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
265 | 287 | | |
266 | 288 | | |
267 | 289 | | |
| |||
319 | 341 | | |
320 | 342 | | |
321 | 343 | | |
| 344 | + | |
322 | 345 | | |
323 | 346 | | |
324 | 347 | | |
| |||
364 | 387 | | |
365 | 388 | | |
366 | 389 | | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
367 | 394 | | |
368 | 395 | | |
369 | 396 | | |
| |||
688 | 715 | | |
689 | 716 | | |
690 | 717 | | |
691 | | - | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
692 | 721 | | |
693 | 722 | | |
694 | 723 | | |
| |||
748 | 777 | | |
749 | 778 | | |
750 | 779 | | |
751 | | - | |
752 | | - | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
753 | 788 | | |
754 | 789 | | |
755 | 790 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
1 | 3 | | |
2 | 4 | | |
3 | 5 | | |
| |||
184 | 186 | | |
185 | 187 | | |
186 | 188 | | |
187 | | - | |
188 | | - | |
189 | | - | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
190 | 200 | | |
191 | 201 | | |
192 | 202 | | |
| |||
222 | 232 | | |
223 | 233 | | |
224 | 234 | | |
225 | | - | |
226 | | - | |
227 | | - | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
228 | 246 | | |
229 | 247 | | |
230 | 248 | | |
| |||
242 | 260 | | |
243 | 261 | | |
244 | 262 | | |
245 | | - | |
246 | | - | |
247 | | - | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
248 | 274 | | |
249 | 275 | | |
250 | 276 | | |
| |||
262 | 288 | | |
263 | 289 | | |
264 | 290 | | |
265 | | - | |
266 | | - | |
267 | | - | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
268 | 302 | | |
269 | 303 | | |
270 | 304 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
1 | 3 | | |
2 | 4 | | |
3 | 5 | | |
| |||
144 | 146 | | |
145 | 147 | | |
146 | 148 | | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
147 | 156 | | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
152 | 162 | | |
153 | 163 | | |
154 | 164 | | |
| |||
0 commit comments