summaryrefslogtreecommitdiff
path: root/cpio
diff options
context:
space:
mode:
authorAlessandro Ghedini <alessandro@ghedini.me>2015-03-01 12:07:45 +0100
committerAlessandro Ghedini <alessandro@ghedini.me>2015-03-04 18:44:03 +0100
commit59357157706d47c365b2227739e17daba3607526 (patch)
treee0cd9555ae8549b31d64c81f45f9381f550376b1 /cpio
parentfc04ba0941fed6b55fa5b90858e1104c8c937d72 (diff)
downloadlibarchive-59357157706d47c365b2227739e17daba3607526.tar.gz
Add ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS option
This fixes a directory traversal in the cpio tool.
Diffstat (limited to 'cpio')
-rw-r--r--cpio/bsdcpio.13
-rw-r--r--cpio/cpio.c2
2 files changed, 4 insertions, 1 deletions
diff --git a/cpio/bsdcpio.1 b/cpio/bsdcpio.1
index f966aa06..e52546e6 100644
--- a/cpio/bsdcpio.1
+++ b/cpio/bsdcpio.1
@@ -156,7 +156,8 @@ See above for description.
.It Fl Fl insecure
(i and p mode only)
Disable security checks during extraction or copying.
-This allows extraction via symbolic links and path names containing
+This allows extraction via symbolic links, absolute paths,
+and path names containing
.Sq ..
in the name.
.It Fl J , Fl Fl xz
diff --git a/cpio/cpio.c b/cpio/cpio.c
index 0acde119..b267e9b8 100644
--- a/cpio/cpio.c
+++ b/cpio/cpio.c
@@ -171,6 +171,7 @@ main(int argc, char *argv[])
cpio->extract_flags |= ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER;
cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_SYMLINKS;
cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_NODOTDOT;
+ cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS;
cpio->extract_flags |= ARCHIVE_EXTRACT_PERM;
cpio->extract_flags |= ARCHIVE_EXTRACT_FFLAGS;
cpio->extract_flags |= ARCHIVE_EXTRACT_ACL;
@@ -256,6 +257,7 @@ main(int argc, char *argv[])
case OPTION_INSECURE:
cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_SYMLINKS;
cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NODOTDOT;
+ cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS;
break;
case 'L': /* GNU cpio */
cpio->option_follow_links = 1;