Commit 083fe12
authored
Merge commit from fork
untar and unzip created symlink entries directly from the archive
without checking that the link target resolved inside the extraction
directory. A tar that planted a symlink whose target pointed above the
output dir, followed by a regular-file entry whose path traversed
through that symlink, allowed Files.newOutputStream to write outside
the caller's chosen target.
This commit adds an ensureSafeSymlinkTarget helper that mirrors the
existing ensureSafeEntry containment check, plus switches the
regular-file write path to open with CREATE_NEW and
LinkOption.NOFOLLOW_LINKS so a pre-existing symlink under the
extraction path cannot be followed.
The shouldRejectSymlinkEscapingTargetOnUntar regression test in
ArchiveUtilsTest builds the malicious tar inline and asserts no file
lands outside target. The existing tar/zip round-trip tests are
updated to construct the source fixture's symlink with a relative
target (the safe form), matching what well-formed OCI layers carry.
Signed-off-by: tonghuaroot <tonghuaroot@gmail.com>1 parent 8e39dd5 commit 083fe12
2 files changed
Lines changed: 80 additions & 6 deletions
File tree
- src
- main/java/land/oras/utils
- test/java/land/oras/utils
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
30 | 31 | | |
31 | 32 | | |
| 33 | + | |
32 | 34 | | |
33 | 35 | | |
34 | 36 | | |
| |||
267 | 269 | | |
268 | 270 | | |
269 | 271 | | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
270 | 291 | | |
271 | 292 | | |
272 | 293 | | |
| |||
376 | 397 | | |
377 | 398 | | |
378 | 399 | | |
379 | | - | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
380 | 403 | | |
381 | 404 | | |
382 | 405 | | |
383 | | - | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
384 | 411 | | |
385 | 412 | | |
386 | 413 | | |
| |||
425 | 452 | | |
426 | 453 | | |
427 | 454 | | |
428 | | - | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
429 | 458 | | |
430 | | - | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
431 | 464 | | |
432 | 465 | | |
433 | 466 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
36 | 37 | | |
37 | 38 | | |
38 | 39 | | |
| |||
92 | 93 | | |
93 | 94 | | |
94 | 95 | | |
95 | | - | |
| 96 | + | |
| 97 | + | |
96 | 98 | | |
97 | 99 | | |
98 | | - | |
| 100 | + | |
99 | 101 | | |
100 | 102 | | |
101 | 103 | | |
| |||
328 | 330 | | |
329 | 331 | | |
330 | 332 | | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
331 | 372 | | |
0 commit comments