Reino: Input Validation and Representation

Problemas de validação e representação da entrada são causados por metacaracteres, codificações alternativas e representações numéricas. Confiar na entrada resulta em problemas de segurança. Os problemas incluem: “Buffer Overflows”, ataques de “Cross-Site Scripting”, “SQL Injection”, entre outros.

Denial of Service

Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos, criando assim uma condição de esgotamento de recursos.

Exemplo 1: O código a seguir permite que um usuário especifique por quanto tempo o processo de trabalho atual ficará suspenso. Ao especificar um número grande, um invasor pode obstruir o processo de trabalho por tempo indeterminado.


...
CALL FUNCTION 'ENQUE_SLEEP'
EXPORTING
SECONDS = usrInput.
...
desc.dataflow.abap.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou se torne indisponível para usuários legítimos.
Explanation
Os invasores podem negar serviço a usuários legítimos inundando o aplicativo com solicitações, mas os ataques de inundação podem frequentemente ser neutralizados na camada de rede. Mais problemáticos são os bugs que permitem que um invasor sobrecarregue o aplicativo usando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou a duração de seu uso.

Por padrão, o ASP.NET limita o tamanho dos dicionários fornecidos pelo cliente, como HttpRequest.Files, HttpRequest.Form, HttpRequest.Cookies, HttpRequest.QueryString, HttpRequest.Headers, HttpRequest.ServerVariables para 1000, e o tamanho pode ser aumentado ou diminuído usando a definição aspnet:MaxHttpCollectionKeys no arquivo de configuração. No entanto, aumentar o tamanho para um valor mais alto aumenta a probabilidade de um ataque DoS.

Exemplo 1: No exemplo a seguir, aspnet:MaxHttpCollectionKeys está definido como 2147483647.

...
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="2147483647" />
</appSettings>
...
References
[1] ASP.NET appSettings Element Microsoft
desc.configuration.dotnet.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos.

Exemplo 1: O código a seguir permite que um usuário especifique por quanto tempo o processo atual ficará suspenso. Ao especificar um número grande, um invasor pode obstruir o processo por tempo indeterminado.


unsigned int usrSleepTime = uatoi(usrInput);
sleep(usrSleepTime);
desc.dataflow.cpp.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos.

Exemplo 1: O código a seguir permite que um usuário especifique por quanto tempo um thread ficará suspenso. Ao especificar um número grande, um invasor pode atrapalhar o thread indefinidamente. Com um pequeno número de solicitações, o invasor pode esgotar o pool de threads do aplicativo.


Sleep(url.duration);
desc.dataflow.cfml.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou se torne indisponível para usuários legítimos.
Explanation
Os invasores podem negar serviço a usuários legítimos inundando o aplicativo com solicitações, mas os ataques de inundação podem frequentemente ser neutralizados na camada de rede. Mais problemáticos são os bugs que permitem que um invasor sobrecarregue o aplicativo usando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou a duração de seu uso.

Exemplo 1: O código a seguir permite que um usuário especifique a quantidade de tempo para a qual uma função Future será executada. Especificando um número grande, um invasor pode bloquear a função Future indefinidamente.


final duration = Platform.environment['DURATION'];
Future.delayed(Duration(seconds: int.parse(duration!)), () => ...);
desc.dataflow.dart.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos.

Exemplo 1: O código a seguir permite que um usuário especifique por quanto tempo um thread ficará suspenso. Ao especificar um número grande, um invasor pode atrapalhar o thread indefinidamente. Com um pequeno número de solicitações, o invasor pode esgotar o pool de threads do aplicativo.


int usrSleepTime = Integer.parseInt(usrInput);
Thread.sleep(usrSleepTime);
Exemplo 2: O código a seguir lê uma String de um arquivo zip. Por usar o método readLine(), ele levará uma quantidade ilimitada de entradas. Um invasor pode tirar proveito desse código para causar uma OutOfMemoryException ou consumir uma grande quantidade de memória para que o programa perca mais tempo realizando a coleta de lixo ou fique sem memória durante uma operação subsequente.


InputStream zipInput = zipFile.getInputStream(zipEntry);
Reader zipReader = new InputStreamReader(zipInput);
BufferedReader br = new BufferedReader(zipReader);
String line = br.readLine();
References
[1] DOS-1: Beware of activities that may use disproportionate resources Oracle
desc.dataflow.java.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos.

Exemplo 1: Este código permite a um usuário especificar o tamanho do sistema de arquivos a ser usado. Ao especificar um número grande, um invasor pode esgotar os recursos do sistema de arquivos.


var fsync = requestFileSystemSync(0, userInput);
Exemplo 2: Este código grava em um arquivo. Uma vez que o arquivo pode ser continuamente escrito e reescrito até ser considerado fechado pelo agente do usuário, a cota de disco, a largura de banda E/S e os processos que podem exigir a análise do conteúdo do arquivo são afetados.


function oninit(fs) {
fs.root.getFile('applog.txt', {create: false}, function(fileEntry) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.seek(fileWriter.length);
var bb = new BlobBuilder();
bb.append('Appending to a file');
fileWriter.write(bb.getBlob('text/plain'));
}, errorHandler);
}, errorHandler);
}

window.requestFileSystem(window.TEMPORARY, 1024*1024, oninit, errorHandler);
desc.dataflow.javascript.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos.
desc.dataflow.php.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos.

Exemplo 1: Este código permite a um usuário especificar a quantidade de tempo durante a qual o sistema deve atrasar ainda mais o processamento. Ao especificar um número grande, um invasor pode atrapalhar o sistema indefinidamente.


procedure go_sleep (
usrSleepTime in NUMBER)
is
dbms_lock.sleep(usrSleepTime);
desc.dataflow.sql.denial_of_service
Abstract
TODO
Explanation
TODO
desc.dataflow.python.denial_of_service
Abstract
Um invasor pode fazer com que o programa trave ou fique indisponível de qualquer outra maneira para usuários legítimos.
Explanation
Os invasores podem ser capazes de negar serviço aos usuários legítimos inundando o aplicativo com solicitações, mas esses ataques de inundação podem ser muitas vezes neutralizados na camada de rede. Mais problemáticos são bugs que permitem a um invasor sobrecarregar o aplicativo utilizando um pequeno número de solicitações. Esses bugs permitem que o invasor especifique a quantidade de recursos do sistema que suas solicitações consumirão ou durante quanto tempo elas usarão esses recursos.

Exemplo 1: O código a seguir permite que um usuário especifique por quanto tempo um thread ficará suspenso. Ao especificar um número grande, um invasor pode atrapalhar o thread indefinidamente. Com um pequeno número de solicitações, o invasor pode esgotar o pool de threads do aplicativo.


Kernel.sleep(user_input)
Exemplo 2: Este código lê uma cadeia a partir de um arquivo. Uma vez que ele utiliza o método readline() sem especificar um limite, ele lerá uma quantidade ilimitada de entradas. Um invasor pode aproveitar esse código para fazer com que o processo pause enquanto consome mais e mais memória, até que possivelmente a memória se esgote.


fd = File.new(myFile)
line = fd.readline
desc.dataflow.ruby.denial_of_service