kys6
This commit is contained in:
@@ -38,15 +38,15 @@
|
|||||||
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces stack-trace}}{11}{figure.8}\protected@file@percent }
|
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces stack-trace}}{11}{figure.8}\protected@file@percent }
|
||||||
\newlabel{fig:stack-trace}{{8}{11}{stack-trace}{figure.8}{}}
|
\newlabel{fig:stack-trace}{{8}{11}{stack-trace}{figure.8}{}}
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.9}Client Side Testing}{11}{subsection.3.9}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {3.9}Client Side Testing}{11}{subsection.3.9}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {section}{\numberline {4}Web Application Security Firewall}{12}{section.4}\protected@file@percent }
|
\@writefile{toc}{\contentsline {section}{\numberline {4}Web Application Security Firewall}{11}{section.4}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Information Gathering}{12}{subsection.4.1}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Information Gathering}{12}{subsection.4.1}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Configuration and Deployment Management Testing}{12}{subsection.4.2}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Configuration and Deployment Management Testing}{12}{subsection.4.2}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Identity Management Testing}{12}{subsection.4.3}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Identity Management Testing}{12}{subsection.4.3}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Authentication Testing}{12}{subsection.4.4}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Authentication Testing}{12}{subsection.4.4}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.5}Authorization Testing}{12}{subsection.4.5}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.5}Authorization Testing}{13}{subsection.4.5}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.6}Session Management Testing}{12}{subsection.4.6}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.6}Session Management Testing}{13}{subsection.4.6}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.7}Input Validation Testing}{12}{subsection.4.7}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.7}Input Validation Testing}{13}{subsection.4.7}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.8}Testing for Error Handling}{12}{subsection.4.8}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.8}Testing for Error Handling}{13}{subsection.4.8}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.9}Client Side Testing}{12}{subsection.4.9}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.9}Client Side Testing}{13}{subsection.4.9}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions}{12}{section.5}\protected@file@percent }
|
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions}{14}{section.5}\protected@file@percent }
|
||||||
\gdef \@abspage@last{12}
|
\gdef \@abspage@last{14}
|
||||||
|
|||||||
@@ -1 +1,15 @@
|
|||||||
<img src="x" onerror="alert(localStorage.getItem('token'))">apple
|
# sql injection
|
||||||
|
SecRule ARGS "['\";]|--" \
|
||||||
|
"id:950001,phase:2,deny,status:403,msg:'SQL Injection Attack Detected',log"
|
||||||
|
|
||||||
|
# xss / html injection
|
||||||
|
SecRule ARGS "<.*>" \
|
||||||
|
"id:950003,phase:2,deny,status:403,msg:'XSS/HTML Injection Detected',log"
|
||||||
|
|
||||||
|
# command injection
|
||||||
|
SecRule ARGS "exec|cat|more|ls|dir|/etc/passwd" \
|
||||||
|
"id:950006,phase:2,deny,status:403,msg:'Command Injection Detected',log"
|
||||||
|
|
||||||
|
# path traversal
|
||||||
|
SecRule ARGS "(\./|\.\./)|ftp|metrics|api-docs" \
|
||||||
|
"id:950007,phase:2,deny,status:403,msg:'Path Traversal Attempt',log"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -299,17 +299,88 @@ A execução deste vetor permitiu extrair o conteúdo do token diretamente do ar
|
|||||||
|
|
||||||
\section{Web Application Security Firewall}
|
\section{Web Application Security Firewall}
|
||||||
|
|
||||||
% Esta seccao sera preenchida com os resultados da Segunda Etapa (Com WAF ativada)
|
\begin{codeblock}{modsecurity.conf}
|
||||||
|
# sql injection
|
||||||
|
SecRule ARGS "['\";]|--" \
|
||||||
|
"id:950001,phase:2,deny,status:403,msg:'SQL Injection Attack Detected',log"
|
||||||
|
|
||||||
|
# xss / html injection
|
||||||
|
SecRule ARGS "<.*>" \
|
||||||
|
"id:950003,phase:2,deny,status:403,msg:'XSS/HTML Injection Detected',log"
|
||||||
|
|
||||||
|
# command injection
|
||||||
|
SecRule ARGS "(\"role\".*:.*\"admin\")|exec|cat|more|ls|dir|/etc/passwd" \
|
||||||
|
"id:950006,phase:2,deny,status:403,msg:'Command Injection Detected',log"
|
||||||
|
|
||||||
|
# path traversal
|
||||||
|
SecRule ARGS "(\./|\.\./)|ftp|metrics|api-docs" \
|
||||||
|
"id:950007,phase:2,deny,status:403,msg:'Path Traversal Attempt',log"
|
||||||
|
|
||||||
|
# exposed stuff
|
||||||
|
SecRule REQUEST_URI "ftp|metrics|api-docs" \
|
||||||
|
"id:950008,phase:2,deny,status:500,msg:'Attempt to access ftp, metrics, api-docs',log"
|
||||||
|
|
||||||
|
# rate limiting on login endpoint (max 5 requests per 30s per IP)
|
||||||
|
SecAction \
|
||||||
|
"id:950009,phase:1,initcol:ip=%{REMOTE_ADDR},pass,nolog"
|
||||||
|
SecRule REQUEST_URI "@streq /rest/user/login" \
|
||||||
|
"id:950010,phase:2,pass,nolog,setvar:ip.login_count=+1,expirevar:ip.login_count=30"
|
||||||
|
SecRule IP:LOGIN_COUNT "@gt 5" \
|
||||||
|
"id:950011,phase:2,deny,status:429,msg:'Rate Limit Exceeded on Login',log"
|
||||||
|
\end{codeblock}
|
||||||
|
|
||||||
|
|
||||||
\subsection{Information Gathering}
|
\subsection{Information Gathering}
|
||||||
|
|
||||||
|
O acesso direto via URL (e.g., \texttt{/ftp}, \texttt{/metrics}, \texttt{/api-docs}) é
|
||||||
|
mitigado pela regra id:950008, que inspeciona o caminho do pedido (\texttt{REQUEST\_URI})
|
||||||
|
e devolve \texttt{500} ao bloquear qualquer acesso direto a estes endpoints!
|
||||||
|
A mitigação desta categoria é, portanto, completa ao nível de pedidos HTTP.
|
||||||
|
|
||||||
\subsection{Configuration and Deployment Management Testing}
|
\subsection{Configuration and Deployment Management Testing}
|
||||||
|
|
||||||
|
A restrição de métodos HTTP e a validação de permissões de diretório requerem
|
||||||
|
intervenção ao nível do servidor Apache ou da aplicação, estando fora do âmbito
|
||||||
|
das regras \texttt{SecRule} definidas.
|
||||||
|
|
||||||
\subsection{Identity Management Testing}
|
\subsection{Identity Management Testing}
|
||||||
|
|
||||||
|
A regra de XSS/injeção HTML (id:950003) bloqueia eficazmente o registo de utilizadores
|
||||||
|
com tags HTML nos campos de \textit{input}, como \texttt{<h1>STRONG}, devolvendo um erro
|
||||||
|
\texttt{403 Forbidden} antes que o pedido chegue à aplicação.
|
||||||
|
|
||||||
|
A vulnerabilidade de escalonamento de permissões (injeção do campo \texttt{"role":"admin"} no corpo JSON do registo) \textbf{não é mitigada pelas regras atuais}, visto que nenhuma delas valida a presença de campos não autorizados no corpo do pedido. A enumeração de contas via mensagens de erro da aplicação também permanece sem mitigação ao nível da WAF.
|
||||||
|
|
||||||
\subsection{Authentication Testing}
|
\subsection{Authentication Testing}
|
||||||
|
|
||||||
|
As regras id:950009--950011 implementam um mecanismo de \textit{rate limiting} sobre o
|
||||||
|
endpoint de autenticação (\texttt{/rest/user/login}). Para cada endereço IP, é mantido
|
||||||
|
um contador de pedidos com janela deslizante de 30 segundos: ao ultrapassar 5 tentativas
|
||||||
|
nessa janela, o servidor devolve \texttt{429 Too Many Requests}, bloqueando eficazmente
|
||||||
|
ataques de \textit{brute force} por dicionário. O bloqueio de contas após múltiplas
|
||||||
|
tentativas falhadas permanece fora do âmbito da WAF, exigindo lógica aplicacional.
|
||||||
|
|
||||||
\subsection{Authorization Testing}
|
\subsection{Authorization Testing}
|
||||||
|
|
||||||
|
O ataque de \textit{Null Byte} (\texttt{\%2500.pdf}) utilizado para contornar
|
||||||
|
a validação de extensões de ficheiro no diretório \texttt{/ftp} não é diretamente mitigado pelas regras configuradas, pois o payload não contém nenhum dos padrões definidos (e.g., \texttt{../}, \texttt{ftp} como argumento). A regra id:950007 teria de ser estendida para incluir sequências de \textit{null byte} codificadas (\texttt{\%00}, \texttt{\%2500}) para cobrir este vetor de ataque.
|
||||||
|
|
||||||
\subsection{Session Management Testing}
|
\subsection{Session Management Testing}
|
||||||
|
|
||||||
|
A configuração da WAF não tem capacidade de alterar os atributos dos cookies definidos pela aplicação. A flag \texttt{HttpOnly} do cookie \texttt{token} continua ausente, uma vez que esta é uma propriedade definida pela camada aplicacional do \textit{JuiceShop}. Ainda assim, a mitigação do XSS (id:950003), descrita na subsecção seguinte, reduz indiretamente o risco de roubo de sessão ao bloquear os vetores que permitiriam a sua exploração.
|
||||||
|
|
||||||
\subsection{Input Validation Testing}
|
\subsection{Input Validation Testing}
|
||||||
|
|
||||||
|
A regra de SQL Injection (id:950001) bloqueia com sucesso pedidos ao endpoint de pesquisa de produtos que contenham caracteres como \texttt{'}, \texttt{"}, \texttt{;} ou a sequência \texttt{--}, devolvendo \texttt{403 Forbidden}. O payload utilizado pelo \textit{sqlmap} é interceptado nesta fase, impedindo a extração de dados da base de dados. A regra de XSS/injeção HTML (id:950003) bloqueia igualmente os payloads com tags \texttt{<img src="x" onerror="...">} e \texttt{<h1>}, neutralizando ambos os vetores de \textit{Reflected XSS} identificados na primeira etapa.
|
||||||
|
|
||||||
\subsection{Testing for Error Handling}
|
\subsection{Testing for Error Handling}
|
||||||
|
|
||||||
|
A WAF atua sobre os pedidos antes de estes chegarem à aplicação, mas não filtra as respostas do servidor, uma vez que a diretiva \texttt{SecResponseBodyAccess} se encontra configurada como \texttt{Off}. Por consequência, a exposição do \textit{stack trace} do \textit{Express.js} em rotas inexistentes (e.g., \texttt{/ftp/teste}) não é mitigada. Para suprimir respostas de erro detalhadas seria necessário ativar a inspeção do corpo da resposta e definir regras sobre o seu conteúdo, ou configurar páginas de erro personalizadas no Apache.
|
||||||
|
|
||||||
\subsection{Client Side Testing}
|
\subsection{Client Side Testing}
|
||||||
|
|
||||||
|
O payload de exfiltração do token JWT via XSS (\texttt{<img src="x" onerror="alert(localStorage.getItem('token'))">}) é bloqueado pela regra id:950003, uma vez que contém a expressão \texttt{<.*>} nos argumentos do pedido de pesquisa. Desta forma, a cadeia de ataque identificada na primeira etapa --- que combinava a falha de XSS com o armazenamento inseguro do token --- é eficazmente neutralizada pela WAF ao nível da injeção inicial, impedindo a execução do código malicioso no contexto do navegador da vítima.
|
||||||
|
|
||||||
\section{Conclusions}
|
\section{Conclusions}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
@@ -15,14 +15,14 @@
|
|||||||
\contentsline {subsubsection}{\numberline {3.7.1}Testing for SQL Injection}{10}{subsubsection.3.7.1}%
|
\contentsline {subsubsection}{\numberline {3.7.1}Testing for SQL Injection}{10}{subsubsection.3.7.1}%
|
||||||
\contentsline {subsection}{\numberline {3.8}Testing for Error Handling}{10}{subsection.3.8}%
|
\contentsline {subsection}{\numberline {3.8}Testing for Error Handling}{10}{subsection.3.8}%
|
||||||
\contentsline {subsection}{\numberline {3.9}Client Side Testing}{11}{subsection.3.9}%
|
\contentsline {subsection}{\numberline {3.9}Client Side Testing}{11}{subsection.3.9}%
|
||||||
\contentsline {section}{\numberline {4}Web Application Security Firewall}{12}{section.4}%
|
\contentsline {section}{\numberline {4}Web Application Security Firewall}{11}{section.4}%
|
||||||
\contentsline {subsection}{\numberline {4.1}Information Gathering}{12}{subsection.4.1}%
|
\contentsline {subsection}{\numberline {4.1}Information Gathering}{12}{subsection.4.1}%
|
||||||
\contentsline {subsection}{\numberline {4.2}Configuration and Deployment Management Testing}{12}{subsection.4.2}%
|
\contentsline {subsection}{\numberline {4.2}Configuration and Deployment Management Testing}{12}{subsection.4.2}%
|
||||||
\contentsline {subsection}{\numberline {4.3}Identity Management Testing}{12}{subsection.4.3}%
|
\contentsline {subsection}{\numberline {4.3}Identity Management Testing}{12}{subsection.4.3}%
|
||||||
\contentsline {subsection}{\numberline {4.4}Authentication Testing}{12}{subsection.4.4}%
|
\contentsline {subsection}{\numberline {4.4}Authentication Testing}{12}{subsection.4.4}%
|
||||||
\contentsline {subsection}{\numberline {4.5}Authorization Testing}{12}{subsection.4.5}%
|
\contentsline {subsection}{\numberline {4.5}Authorization Testing}{13}{subsection.4.5}%
|
||||||
\contentsline {subsection}{\numberline {4.6}Session Management Testing}{12}{subsection.4.6}%
|
\contentsline {subsection}{\numberline {4.6}Session Management Testing}{13}{subsection.4.6}%
|
||||||
\contentsline {subsection}{\numberline {4.7}Input Validation Testing}{12}{subsection.4.7}%
|
\contentsline {subsection}{\numberline {4.7}Input Validation Testing}{13}{subsection.4.7}%
|
||||||
\contentsline {subsection}{\numberline {4.8}Testing for Error Handling}{12}{subsection.4.8}%
|
\contentsline {subsection}{\numberline {4.8}Testing for Error Handling}{13}{subsection.4.8}%
|
||||||
\contentsline {subsection}{\numberline {4.9}Client Side Testing}{12}{subsection.4.9}%
|
\contentsline {subsection}{\numberline {4.9}Client Side Testing}{13}{subsection.4.9}%
|
||||||
\contentsline {section}{\numberline {5}Conclusions}{12}{section.5}%
|
\contentsline {section}{\numberline {5}Conclusions}{14}{section.5}%
|
||||||
|
|||||||
Reference in New Issue
Block a user