Uma API é um contrato entre quem chama e o que se chama. As formas mais comuns de abuso de API ocorrem quando o responsável pela chamada não respeita sua parte do contrato. Por exemplo, se um programa não chama chdir() após chamar chroot(), ele viola o contrato que especifica como alterar o diretório raiz ativo de forma segura. Outro bom exemplo de abuso de biblioteca é esperar que o elemento chamado retorne informações confiáveis de DNS ao responsável pela chamada. Nesse caso, o responsável pela chamada abusa a API do elemento chamado ao fazer certas suposições sobre seu comportamento (isto é, que o valor de retorno pode ser usado para fins de autenticação). A outra parte também pode violar o contrato entre quem chama e o que se chama. Por exemplo, se um programador definir SecureRandom como subclasse e retornar um valor não aleatório, o contrato será violado.
Often Misused: File Upload
O código a seguir recebe um arquivo carregado e o atribui ao objeto
posted
. FileUpload
é do tipo System.Web.UI.HtmlControls.HtmlInputFile
.Exemplo 1:
HttpPostedFile posted = FileUpload.PostedFile;
Mesmo que um programa armazene arquivos carregados em um diretório não acessível na Web, os invasores ainda podem ser capazes de se aproveitar da capacidade de introduzir conteúdo mal-intencionado no ambiente do servidor para preparar outros ataques. Se o programa for suscetível a vulnerabilidades de manipulação de caminho, injeção de comando ou inclusão de arquivos perigosos, um invasor poderá carregar um arquivo com conteúdo mal-intencionado e fazer com que este seja lido ou executado pelo programa ao explorar outra vulnerabilidade.
Exemplo 1: A seguinte classe de controlador Spring MVC tem um parâmetro que pode ser usado para manipular arquivos carregados.
@Controller
public class MyFormController {
...
@RequestMapping("/test")
public String uploadFile (org.springframework.web.multipart.MultipartFile file) {
...
} ...
}
Mesmo que um programa armazene arquivos carregados em um diretório não acessível na Web, os invasores ainda podem ser capazes de se aproveitar da capacidade de introduzir conteúdo mal-intencionado no ambiente do servidor para preparar outros ataques. Se o programa for suscetível a vulnerabilidades de manipulação de caminho, injeção de comando ou inclusão de arquivos perigosos, um invasor poderá carregar um arquivo com conteúdo mal-intencionado e fazer com que este seja lido ou executado pelo programa ao explorar outra vulnerabilidade.
Exemplo 1: O código a seguir processa arquivos carregados e os move para um diretório na raiz da Web. Os invasores podem carregar arquivos de origem PHP mal-intencionados nesse programa e, posteriormente, solicitar esses arquivos ao servidor, o que fará com que eles sejam executados pelo intérprete PHP.
<?php
$udir = 'upload/'; // Relative path under Web root
$ufile = $udir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $ufile)) {
echo "Valid upload received\n";
} else {
echo "Invalid upload rejected\n";
} ?>
Mesmo que um programa armazene arquivos carregados em um diretório não acessível na Web, os invasores ainda podem ser capazes de se aproveitar da capacidade de introduzir conteúdo mal-intencionado no ambiente do servidor para preparar outros ataques. Se o programa for suscetível a vulnerabilidades de manipulação de caminho, injeção de comando ou inclusão remota, um invasor poderá carregar um arquivo com conteúdo mal-intencionado e fazer com que este seja lido ou executado pelo programa ao explorar outra vulnerabilidade.
Exemplo 1: O código a seguir processa arquivos carregados e os move para um diretório na raiz da Web. Os invasores podem fazer o upload de arquivos mal-intencionados para esse programa e depois solicitá-los do servidor.
from django.core.files.storage import default_storage
from django.core.files.base import File
...
def handle_upload(request):
files = request.FILES
for f in files.values():
path = default_storage.save('upload/', File(f))
...
Mesmo que um programa armazene arquivos carregados em um diretório não acessível na Web, os invasores ainda podem ser capazes de se aproveitar da capacidade de introduzir conteúdo mal-intencionado no ambiente do servidor para preparar outros ataques. Se o programa for suscetível a vulnerabilidades de manipulação de caminho, injeção de comando ou inclusão remota, um invasor poderá carregar um arquivo com conteúdo mal-intencionado e fazer com que este seja lido ou executado pelo programa ao explorar outra vulnerabilidade.
Mesmo que um programa armazene arquivos carregados em um diretório não acessível publicamente, os invasores ainda podem ser capazes de se aproveitar da capacidade de introduzir conteúdo mal-intencionado no ambiente do servidor para preparar outros ataques. Se o programa for suscetível a vulnerabilidades de manipulação de caminho, injeção de comando ou inclusão remota, um invasor poderá carregar um arquivo com conteúdo mal-intencionado e fazer com que este seja lido ou executado pelo programa ao explorar outra vulnerabilidade.
Mesmo que um programa armazene arquivos carregados em um diretório não acessível na Web, os invasores ainda podem ser capazes de se aproveitar da capacidade de introduzir conteúdo mal-intencionado no ambiente do servidor para preparar outros ataques. Se o programa for suscetível a vulnerabilidades de manipulação de caminho, injeção de comando ou inclusão de arquivos perigosos, um invasor poderá carregar um arquivo com conteúdo mal-intencionado e fazer com que este seja lido ou executado pelo programa ao explorar outra vulnerabilidade.
Uma tag
<input>
do tipo file
indica que o programa aceita uploads de arquivos.Exemplo 1:
<input type="file">