2017.W27 - Path Traversal - 資安

Joseph avatar
By Joseph
at 2017-07-04T21:58

Table of Contents

2017.W27 - Path Traversal
> 重新設計輪子當然可以 只要妳開的車裝上你的輪子

## 前言 ##
最近在處理公司上的事情 一直覺得重新造輪子是個不錯的概念

但是也不要在公司產品上用你設計輪子啊 QQ

## 內容 ##
Path Traversal 或者稱為 Directory Travelsal 是一系列安全性的漏洞概念

主要是處理檔案路徑時不正確 造成存取的檔案超出設計者的預期

從 CWE 列表中可以從 CWE-21 - Pathname Traversal and Equivalence Errors[0] 開始

引起各種 Path Travelsal 的問題

主要的問題都會回歸到所謂的 CWE-20 Improper Input Validateion[1]

也就是不正確的使用者輸入驗證


簡單的例子:有一個 web service 會提供 上傳檔案 與 自動轉檔 功能

轉檔功能操作時 需要指定檔案的路徑

一個基本的驗證則是快速判斷檔案路徑中是否包含 . 跟 .. (Linux-Based)

但是這樣的假設也不盡正確 原因是這樣就代表不允許使用 ..abc 這樣的名稱

因此一個聰明的概念就是利用 / 來切割檔案名稱

並且逐一檢查是否包含 . 或者 ..



然而一個優秀的 c/c++ programmer 應該會知道 glibc 會提供 realpath 這個函數

根據 man realpath 可以得到他的主要描述

returns the canonicalized absolute pathname

在下面的描述中的第一段話更明確的表示他的主要功能

The realpath() function resolves all symbolic links, extra ``/'' characters,
and references to /./ and /../ in file_name.

這代表用 realpath 處理過後的檔案已經不會包含任何 . .. 跟 symbolic link

這些有機會跳轉的符號



從 glibc 的 realpath 的 source code[2] 來看

可以看到 __realpath 主要有以下幾個判斷

1. 輸入的檔名是否為空
2. 當下路徑不存在則報錯
3. 相對路徑則自動帶入當下路徑 getcwd
4. 依序處理每一個 / 切割的元素
4.1 無視連續的 /
4.2 無視 . 的元素
4.3 .. 則跳到上一個資料夾 已經是 / 則無視
4.4 透過 stat 判斷檔案是否檔案、資料夾是否存在
4.5 如果是 symbolic link 則透過 readlink 獲得真實路徑


透過 realpath 的好處在於你可以獲得一個乾淨的絕對路徑

之後就能透過這個路徑 判斷目的地是否在允許的路徑之下



至於為什麼不需要重新造輪子 原因在於這個問題不是第一天發現

因此在這個平台下這個方式會經過各種優化

像是在這篇文章中[3] 提到的 GNU 的 yes 指令快到突破天際 (12.8 GB/s)

這就是針對平台已經特殊優化的結果了

再重新設計一個 yes 除非有特殊的需求

不然還是乖乖用經過千錘百鍊的版本吧!




[0]: https://cwe.mitre.org/data/definitions/21.html
[1]: https://cwe.mitre.org/data/definitions/20.html
[2]: https://github.com/lattera/glibc/blob/master/stdlib/canonicalize.c
[3]: https://www.reddit.com/r/unix/comments/6gxduc/how_is_gnu_yes_so_fast/

--
Tags: 資安

All Comments

Emily avatar
By Emily
at 2017-07-09T20:21
12.8GB/S AS FUK

The OpenVPN post-audit bug bonanza

Elma avatar
By Elma
at 2017-06-28T09:37
OpenVPN 最近有一點多的漏洞。 來源: http://tinyurl.com/ycejjzol 漏洞: CVE-2017-7521 Remote server crashes/double-free/memory leaks in certificate processing CVE-2017 ...

2017.W26 - 雜湊函數 用數位貨幣為例

Kelly avatar
By Kelly
at 2017-06-27T23:06
2017.W26 - 雜湊函數 以數位貨幣為例 andgt; 供給來自於需求 ## 前言 ## 最近數位(虛擬)貨幣正夯 根據 Bitcoin[0] 的論文中提到 BTC 的若干要求中提到的 PoW (Proof-of-Word) 正是例計算一個 SHA 256 得到的 Hash 中 開頭若干為 ...

CHROME隨機重新導向到2345首頁

Jack avatar
By Jack
at 2017-06-23T14:25
最近這陣子在用chrome搜尋網址時 都會不定時被重新導向www.2345.com的網頁 1.由於發生時間是隨機 所以判斷不是惡意網站 2.也不屬於首頁被綁架的類型 所以瀏覽器內容的開始位置也是正常的 3.由於在不同台電腦上的chrome也有同樣的情形 所以判斷可能是被安裝了病毒工具列或者chrome擴充套件 ...

2017.W25 - 漏洞挖掘 以 The Stack Clash 為例

Tracy avatar
By Tracy
at 2017-06-20T22:29
2017.W25 - 漏洞挖掘 以 The Stack Clash 為例 andgt; Bounty Hunter 說簡單很簡單 說難也很難 ## 前言 ## 最近在處理一些事情 突然覺得要當專職 Bounty Hunter 說簡單真的很簡單 說難也真的很難 端看你找到的漏洞有多嚴重... 簡 ...

Nginx log出現怪異訊息

Skylar DavisLinda avatar
By Skylar DavisLinda
at 2017-06-20T02:24
今天在看nginx log的時候,看到有奇怪訊息如下 164.52.7.132 - - and#34;\x16\x03\x01\x01\x22\x01\x00\x01\x1E\x03\x03h\xABand#34;+ and#34;(\x06Bandlt;\x1D\x5C\ ...