lib/checkout: Validate pathnames during checkout
While we do protect against path traversal during pull, let's also validate during checkout; it's a cheap operation and provides good last-mile protection. Closes: #1412 Approved by: jlebon
This commit is contained in:
1 parent
2b78df25f4
commit
f3ae36ff43
2 files changed
+21
-3
No files matched your search
@@ -535,6 +535,10 @@ checkout_one_file_at (OstreeRepo *repo,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
/* Validate this up front to prevent path traversal attacks */
|
||||
if (!ot_util_filename_validate (destination_name, error))
|
||||
return FALSE;
|
||||
|
||||
gboolean need_copy = TRUE;
|
||||
gboolean is_bare_user_symlink = FALSE;
|
||||
char loose_path_buf[_OSTREE_LOOSE_PATH_MAX];
|
||||
@@ -897,6 +901,15 @@ checkout_tree_at_recurse (OstreeRepo *self,
|
||||
while (g_variant_iter_loop (&viter, "(&s@ay@ay)", &dname,
|
||||
&subdirtree_csum_v, &subdirmeta_csum_v))
|
||||
{
|
||||
/* Validate this up front to prevent path traversal attacks. Note that
|
||||
* we don't validate at the top of this function like we do for
|
||||
* checkout_one_file_at() becuase I believe in some cases this function
|
||||
* can be called *initially* with user-specified paths for the root
|
||||
* directory.
|
||||
*/
|
||||
if (!ot_util_filename_validate (dname, error))
|
||||
return FALSE;
|
||||
|
||||
const size_t origlen = selabel_path_buf ? selabel_path_buf->len : 0;
|
||||
if (selabel_path_buf)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user