tar: refuse to untar files with "/../" components
This commit is contained in:
parent
b596335868
commit
c1660fea6d
@ -157,7 +157,6 @@ char get_header_tar(archive_handle_t *archive_handle)
|
|||||||
file_header->name = concat_path_file(tar.prefix, tar.name);
|
file_header->name = concat_path_file(tar.prefix, tar.name);
|
||||||
} else
|
} else
|
||||||
file_header->name = xstrdup(tar.name);
|
file_header->name = xstrdup(tar.name);
|
||||||
/* FIXME: add check for /../ attacks */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set bits 12-15 of the files mode */
|
/* Set bits 12-15 of the files mode */
|
||||||
@ -244,6 +243,12 @@ char get_header_tar(archive_handle_t *archive_handle)
|
|||||||
linkname = NULL;
|
linkname = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (!strncmp(file_header->name, "/../"+1, 3)
|
||||||
|
|| strstr(file_header->name, "/../")
|
||||||
|
) {
|
||||||
|
bb_error_msg_and_die("name with '..' encountered: '%s'",
|
||||||
|
file_header->name);
|
||||||
|
}
|
||||||
|
|
||||||
/* Strip trailing '/' in directories */
|
/* Strip trailing '/' in directories */
|
||||||
/* Must be done after mode is set as '/' is used to check if its a directory */
|
/* Must be done after mode is set as '/' is used to check if its a directory */
|
||||||
|
Loading…
Reference in New Issue
Block a user