界: Input Validation and Representation

輸入驗證和表示法問題是由中繼字元、替代編碼和數值表示法引起的。信任輸入會導致安全問題。問題包括:「Buffer Overflows」、「Cross-Site Scripting」攻擊、「SQL Injection」及其他許多問題。

Server-Side Request Forgery

Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可以影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例 1:在以下範例中,攻擊者可以控制伺服器連線的 URL。


...
PageReference ref = ApexPages.currentPage();
Map<String,String> params = ref.getParameters();
HttpRequest req = new HttpRequest();
req.setEndpoint(params.get('url'));
HTTPResponse res = new Http().send(req);


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 配置可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列類型的攻擊:

- 內部網路資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 執行 DNS cache poisoning 攻擊。

desc.dataflow.apex.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可以影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


string url = Request.Form["url"];
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(url);


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 企業內部網資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入式攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本地檔案。
- 在 Windows 系統上,file:// 架構及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。

References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.dotnet.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可以影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


char *url = maliciousInput();
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, url);
CURLcode res = curl_easy_perform(curl);


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 配置可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 內部網路資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 結構描述存取本機檔案。
- 在 Windows 系統上,使用 file:// 結構描述及 UNC 路徑會使攻擊者能夠掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。

desc.dataflow.cpp.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可以影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


...
final server = await HttpServer.bind('localhost', 18081);
server.listen((request) async {
final headers = request.headers;
final url = headers.value('url');
final client = IOClient();
final response = await client.get(Uri.parse(url!));
...
}


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 配置可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 內部網路資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本機檔案。
- 在 Windows 系統上,file:// 結構描述及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。

desc.dataflow.dart.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可能影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP 位址,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


url := request.Form.Get("url")
res, err =: http.Get(url)
...


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 架構可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 內部網路資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本機檔案。
- 在 Windows 系統上,使用 file:// 架構及 UNC 路徑掃描並存取內部共用。
- 執行 DNS Cache Poisoning 攻擊。

References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.golang.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可以影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


String url = request.getParameter("url");
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response1 = httpclient.execute(httpGet);


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 企業內部網資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入式攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本地檔案。
- 在 Windows 系統上,file:// 架構及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。

References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.java.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可能影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP 位址,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


var http = require('http');
var url = require('url');

function listener(request, response){
var request_url = url.parse(request.url, true)['query']['url'];
http.request(request_url)
...
}
...
http.createServer(listener).listen(8080);
...


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 企業內部網資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用注入攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本地檔案。
- 在 Windows 系統上,file:// 架構及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。
References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.javascript.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可以影響應用程式伺服器建立的網路連線時,就會發生 Server-Side Request Forgery。網路連線來自應用程式伺服器的內部 IP,因而攻擊者可以使用此連線略過網路控制措施,並掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


val url: String = request.getParameter("url")
val httpclient: CloseableHttpClient = HttpClients.createDefault()
val httpGet = HttpGet(url)
val response1: CloseableHttpResponse = httpclient.execute(httpGet)


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 內部網路資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本機檔案。
- 在 Windows 系統上,file:// 結構描述及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。

References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.kotlin.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可能影響應用程式伺服器建立的網路連線時,就會發生伺服器端偽造要求。網路連線來自應用程式伺服器內部 IP 位址,因而攻擊者可以使用此連線略過網路控制措施,並且掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


$url = $_GET['url'];
$c = curl_init();
curl_setopt($c, CURLOPT_POST, 0);
curl_setopt($c,CURLOPT_URL,$url);
$response=curl_exec($c);
curl_close($c);


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 企業內部網資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入式攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本地檔案。
- 在 Windows 系統上,file:// 架構及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。

References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.php.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可能影響應用程式伺服器建立的網路連線時,就會發生伺服器端偽造要求。網路連線來自應用程式伺服器內部 IP 位址,因而攻擊者可以使用此連線略過網路控制措施,並且掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


url = request.GET['url']
handle = urllib.urlopen(url)


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 企業內部網資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入式攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本地檔案。
- 在 Windows 系統上,file:// 架構及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。

References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.python.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可能影響應用程式伺服器建立的網路連線時,就會發生伺服器端偽造要求。網路連線來自應用程式伺服器內部 IP 位址,因而攻擊者可以使用此連線略過網路控制措施,並且掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


url = req['url']
Net::HTTP.get(url)


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 企業內部網資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用插入式攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本地檔案。
- 在 Windows 系統上,file:// 架構及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS cache poisoning 攻擊。
desc.dataflow.ruby.server_side_request_forgery
Abstract
應用程式利用使用者控制的資料啟動與第三方系統的網路連線以製作資源 URI。
Explanation
當攻擊者可能影響應用程式伺服器建立的網路連線時,就會發生伺服器端偽造要求。網路連線來自應用程式伺服器內部 IP 位址,因而攻擊者可以使用此連線略過網路控制措施,並且掃描或攻擊原本未暴露的內部資源。

範例:在以下範例中,攻擊者可以控制伺服器連線的 URL。


def getFile(url: String) = Action { request =>
...
val url = request.body.asText.getOrElse("http://google.com")

ws.url(url).get().map { response =>
Ok(s"Request sent to $url")
}
...
}


攻擊者能否劫持網路連線取決於其可以控制的 URI 特定部分,以及用於建立連線的程式庫。例如,控制 URI 結構描述可讓攻擊者使用不同於 httphttps 的通訊協定,例如:

- up://
- ldap://
- jar://
- gopher://
- mailto://
- ssh2://
- telnet://
- expect://

攻擊者可以利用這一劫持的網路連線執行下列攻擊:

- 企業內部網資源的連接埠掃描。
- 規避防火牆。
- 攻擊應用程式伺服器或內部網路上所執行之易受攻擊的程式。
- 使用注入攻擊或 CSRF 攻擊內部/外部 Web 應用程式。
- 使用 file:// 架構存取本機檔案。
- 在 Windows 系統上,file:// 架構及 UNC 路徑可允許攻擊者掃描並存取內部共用內容。
- 執行 DNS 快取下毒攻擊。

References
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
desc.dataflow.scala.server_side_request_forgery