<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Larissa Fabiao Fonseca on Medium]]></title>
        <description><![CDATA[Stories by Larissa Fabiao Fonseca on Medium]]></description>
        <link>https://medium.com/@larissafabiaofonseca?source=rss-9ab5b6cb7101------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*2soCcAcESrmMjiNHycj73Q.jpeg</url>
            <title>Stories by Larissa Fabiao Fonseca on Medium</title>
            <link>https://medium.com/@larissafabiaofonseca?source=rss-9ab5b6cb7101------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 15:27:26 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@larissafabiaofonseca/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Código seguro com o Horusec]]></title>
            <link>https://larissafabiaofonseca.medium.com/c%C3%B3digo-seguro-com-o-horusec-539f9f4a154?source=rss-9ab5b6cb7101------2</link>
            <guid isPermaLink="false">https://medium.com/p/539f9f4a154</guid>
            <category><![CDATA[qualidade-de-software]]></category>
            <category><![CDATA[segurança]]></category>
            <category><![CDATA[código]]></category>
            <category><![CDATA[horusec]]></category>
            <category><![CDATA[segurança-da-informação]]></category>
            <dc:creator><![CDATA[Larissa Fabiao Fonseca]]></dc:creator>
            <pubDate>Fri, 30 Apr 2021 20:08:44 GMT</pubDate>
            <atom:updated>2021-04-30T20:08:44.634Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*EQU1hhBtqt8ccMwzSF3Uqg.jpeg" /></figure><p>Como analista de segurança da informação, uma das funções que lido diariamente é a necessidade de garantir que os produtos em desenvolvimento pela minha equipe estejam de acordo os padrões de segurança esperados. Mesmo desenvolvedores experientes podem deixar passar um pequeno detalhe no código que pode prejudicar a segurança de seu produto. Para auxiliar neste processo, ferramentas de análise estática sempre são bem vindas, principalmente considerando que as mesmas podem ser embutidas na pipeline de forma a automatizar sua execução.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*EQU1hhBtqt8ccMwzSF3Uqg.jpeg" /></figure><p>A análise estática de código consiste em analisar linha a linha do código fonte para verificar se algum padrão de código vulnerável está sendo utilizado ou ainda se alguma biblioteca ou framework com falhas de segurança está em uso. Com base nisto, uma ótima opção de ferramenta que realiza esse processo é o framework Horusec, o qual irei explorar e neste artigo através da utilização de sua versão CLI.</p><blockquote><a href="https://www.horusec.io/site/">https://www.horusec.io/site/</a></blockquote><p>O Horusec realiza uma análise de código estática combinando diversas ferramentas de segurança para garantir uma verificação completa do código e também uma maior cobertura de linguagens suportadas pela mesma . Por ser open source, temos como vantagem o fato de ser gratuita e de podermos colaborar com o seu desenvolvimento. Além disso, temos como vantagem a fácil utilização da ferramenta, a qual vamos entender a seguir.</p><p>Para a construção deste artigo, utilizei o ubuntu 20.04, tendo como pré requisito a instalação do docker para a instalação do Horusec, e também a intalação do Git e GitHub para obter o projeto utilizado como exemplo.</p><p><a href="https://github.com/ZupIT/horusec">GitHub - ZupIT/horusec: Horusec is an open source tool that improves identification of vulnerabilities in your project with just one command.</a></p><h3>Como instalar?</h3><p>Antes de começar a instalação do horus, certifique-se de que possui o <em>Docker</em> com uma versão igual ou superior a versão <em>19.0</em>. Para verificar se sua máquina já possui o <em>Docker</em> de acordo com os critérios previamente citados, execute o seguinte comando:</p><p>docker version</p><p>Agora que sabemos que seu computador possui os pré requisitos, vamos iniciar a instalação do Horusec. Para isso, neste tutorial, utilizaremos o terminal (ou <em>cmd</em>) do windows ou do linux, utilizando seus respectivos comandos para a instalação da <strong>última versão disponível</strong>:</p><h4>Para sistemas Mac ou Linux:</h4><p>curl -fsSL <a href="https://horusec.io/bin/install.sh">https://horusec.io/bin/install.sh</a> | bash</p><h4>Para Windows:</h4><p>curl “https://horusec.exe&quot; -o “./horusec.exe” &amp;&amp; ./horusec.exe version</p><p>Vale ressaltar que a ferramenta é compatível com os sistemas l<em>inux_x86, linux_x64, mac_x64, win_x86 e win_x64</em>. Para instalar outras versões do horus pode-se utilizar a instalação manual. Para mais informações sobre a instalação, consultar a documentação do projeto, disponibilizada <a href="https://docs.horusec.io/">aqui</a>.</p><h3>Como executar?</h3><p>Como exemplo, usarei um projeto criado propositalmente com algumas vulnerabilidades comuns, este projeto está disponível neste <a href="https://github.com/larissafabiao/InsecureCode">repositório</a>. Para executar o horus é necessário clonar o repositório localmente, caso o mesmo já não esteja em sua máquina, e dentro do terminal navegar até a pasta do projeto. Após localiza-lo, devemos migrar para a branch desejada caso existam múltiplas branchs no projeto. Por fim, para iniciar a análise, o seguinte comando deverá ser executado para realizar uma análise simples:</p><pre>horusec start</pre><p>Após executar o comando, você terá que confirmar se o diretório selecionado corresponde ao desejado para executar realizar a varredura do Horus e posteriormente verá que serão exibidas diversas mensagens informando o tempo restante de análise. Caso precise de análises mais complexas, a ferramenta possibilita a inclusão de parâmetros para configurar itens adicionais à análise. Os principais parâmetros são:</p><ul><li><strong>-t</strong> : usado para definir o timeout da análise, o qual é por padrão 600 segundos.</li><li><strong>-G</strong> : usado para habilitar a busca exibindo o autor da vulnerabilidade. Para usar definimos como <strong>-G=”true”</strong>.</li><li><strong>--enable-git-history</strong> : usado para habilitar a análise em todo o histórico de modificações do github, muito útil para encontrar vulnerabilidades como credenciais hardcoded corrigidas porém ainda salvas no histórico do github. Para utilizar, adicionamos o parâmetro da seguinte forma:<strong> — enable-git-history=”true”</strong>.</li><li>-<strong>F </strong>: usado para ignorar vulnerabilidades de acordo com hash identificador da mesma (veremos mais sobre isso na próxima seção). Usado no formato <strong>-F=”hash-da-vulnerabilidade”</strong>.</li><li><strong>-i </strong>: determinar paths que serão excluídos da análise.</li><li><strong>-s</strong> : definir níveis de vulnerabilidade que devem ser ignorados. Usado da seguinte forma: <strong>-s:”LOW,MEDIUM, NOSEC”</strong>.</li><li><strong>-O</strong> : usado para configurar o local de saída caso selecionado para o resultado ir para um arquivo. Usado da seguinte forma: <strong>-O=”caminho-do-local”</strong>.</li><li><strong>-o </strong>: definir um formato de saída para que o resultado da análise seja enviado para um arquivo. Os formatos aceitos são json, sonarqube ou text.</li></ul><p>Para ver todos os parâmetros que podem ser utilizados com a ferramenta para aprimorar a análise, execute o comando:</p><pre>horusec start --help</pre><h3>Como analisar?</h3><p>Agora que já sabemos como executar a ferramenta para analisar o código, precisamos entender o relatório criado após a sua execução. Todos os exemplos mostrados a seguir correspondem a uma análise simples executada no projeto previamente citado.</p><p>Após executar a análise, o seguinte resultado será exibido no terminal:</p><pre>$ horusec start<br>✔ The folder selected is: [/home/exemple/InsecureCode]. Proceed? [Y/n]</pre><pre>WARN[0006] {HORUSEC_CLI} When starting the analysis WE SKIP A TOTAL OF 277 FILES that are not considered to be analyzed. To see more details use flag --log-level=debug</pre><pre>WARN[0006] {HORUSEC_CLI} PLEASE DON&#39;T REMOVE &quot;.horusec&quot; FOLDER BEFORE THE ANALYSIS FINISH! Don’t worry, we’ll remove it after the analysis ends automatically! Project sent to folder in location: [/home/exemple/InsecureCode/.horusec/690c2ec4-c580-4975-b21c-dcfca794108a]</pre><pre>INFO[0006] Hold on! Horusec still analysis your code. Timeout in: 600s <br>INFO[0021] Hold on! Horusec still analysis your code. Timeout in: 585s <br>WARN[0036] {HORUSEC_CLI} Horusec not show info vulnerabilities in this analysis, to see info vulnerabilities add option &quot;enableInformationSeverity&quot;=&quot;true&quot;. For more details use (horusec start --help) command.</pre><pre>==================================================================================</pre><pre>HORUSEC ENDED THE ANALYSIS WITH STATUS OF &quot;success&quot; AND WITH THE FOLLOWING RESULTS:</pre><pre>==================================================================================</pre><pre>Analysis StartedAt: 2021-01-21 21:08:10<br>Analysis FinishedAt: 2021-01-21 21:08:40</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: HIGH<br>Line: 21<br>Column: 0<br>SecurityTool: HorusecJava<br>Confidence: LOW<br>File: //home/exemple/InsecureCode/CWE89_SQL_Injection__connect_tcp_execute_01.java<br>Code: import javax.servlet.http.*;<br>Details: Web applications should not have a main method<br>Having a main method in a web application opens a door to the application logic that an attacker may never be able to reach (but watch out if one does!), but it is a sloppy practice and indicates that other problems may be present. For more information checkout the CWE-489 (<a href="https://cwe.mitre.org/data/definitions/489.html">https://cwe.mitre.org/data/definitions/489.html</a>) advisory.<br>Type: Vulnerability<br>ReferenceHash: 8005bf5843d10e9ebef303691d2718bccc74752d9379189cb42a84af7fee151a</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: HIGH<br>Line: 20<br>Column: 0<br>SecurityTool: HorusecJava<br>Confidence: LOW<br>File: /home/exemple/InsecureCode/CWE614_Sensitive_Cookie_Without_Secure__Servlet_03.java<br>Code: import javax.servlet.http.*;<br>Details: Web applications should not have a main method<br>Having a main method in a web application opens a door to the application logic that an attacker may never be able to reach (but watch out if one does!), but it is a sloppy practice and indicates that other problems may be present. For more information checkout the CWE-489 (<a href="https://cwe.mitre.org/data/definitions/489.html">https://cwe.mitre.org/data/definitions/489.html</a>) advisory.<br>Type: Vulnerability<br>ReferenceHash: 8a1bc784e471da40f2196cf61f6f512c919f411578f2b2070efcb2a0dca64835</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: HIGH<br>Line: 20<br>Column: 0<br>SecurityTool: HorusecJava<br>Confidence: LOW<br>File: /home/exemple/InsecureCode/CWE598_Information_Exposure_QueryString__Servlet_08.java<br>Code: import javax.servlet.http.*;<br>Details: Web applications should not have a main method<br>Having a main method in a web application opens a door to the application logic that an attacker may never be able to reach (but watch out if one does!), but it is a sloppy practice and indicates that other problems may be present. For more information checkout the CWE-489 (<a href="https://cwe.mitre.org/data/definitions/489.html">https://cwe.mitre.org/data/definitions/489.html</a>) advisory.<br>Type: Vulnerability<br>ReferenceHash: d641bd0928f23149ea285ba4a47631d924bd9e04eb89b92bb66744be5bdc76e2</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: HIGH<br>Line: 115<br>Column: 51<br>SecurityTool: HorusecJava<br>Confidence: LOW<br>File: /home/exemple/InsecureCode/CWE89_SQL_Injection__connect_tcp_execute_01.java<br>Code: users (status) values (&#39;updated&#39;) where name=&#39;&quot;+data+&quot;&#39;&quot;);<br>Details: SQL Injection<br>The input values included in SQL queries need to be passed in safely. Bind variables in prepared statements can be used to easily mitigate the risk of SQL injection. Alternatively to prepare statements, each parameter can be escaped manually. For more information checkout the CWE-89 (<a href="https://cwe.mitre.org/data/definitions/89.html">https://cwe.mitre.org/data/definitions/89.html</a>) advisory.<br>Type: Vulnerability<br>ReferenceHash: 37a7cf46d0838d9c0ac94d025e08cb688601cd05501c8149ec81f3eb84c3db7d</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: HIGH<br>Line: 27<br>Column: 13<br>SecurityTool: Semgrep<br>Confidence: <br>File: /home/exemple/InsecureCode/CWE614_Sensitive_Cookie_Without_Secure__Servlet_03.java<br>Code:         if (5 == 5)<br>Details: `5 == 5` or `5 != 5` is always true. (Unless the value compared is a float or double).<br>To test if `5` is not-a-number, use `Double.isNaN(5)`.</pre><pre>Type: Vulnerability<br>ReferenceHash: 1ea89b0d9469dd8c80b72e26941e11fd53c36a3fe3d8f42095498696f299dc75</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: HIGH<br>Line: 41<br>Column: 13<br>SecurityTool: Semgrep<br>Confidence: <br>File: /home/exemple/InsecureCode/CWE614_Sensitive_Cookie_Without_Secure__Servlet_03.java<br>Code:         if (5 != 5)<br>Details: `5 == 5` or `5 != 5` is always true. (Unless the value compared is a float or double).<br>To test if `5` is not-a-number, use `Double.isNaN(5)`.</pre><pre>Type: Vulnerability<br>ReferenceHash: 4f3944bd0fa8993cce4dee80471349500936603a60fecf72c8c10a9ef853e933</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: HIGH<br>Line: 63<br>Column: 13<br>SecurityTool: Semgrep<br>Confidence: <br>File: /home/exemple/InsecureCode/CWE614_Sensitive_Cookie_Without_Secure__Servlet_03.java<br>Code:         if (5 == 5)<br>Details: `5 == 5` or `5 != 5` is always true. (Unless the value compared is a float or double).<br>To test if `5` is not-a-number, use `Double.isNaN(5)`.</pre><pre>Type: Vulnerability<br>ReferenceHash: 0534f1b6ab9966d4293a032237c02e75d94c97e1b038c32b89f539b373e815ed</pre><pre>==================================================================================</pre><pre>Language: Java<br>Severity: LOW<br>Line: 50<br>Column: 25<br>SecurityTool: HorusecJava<br>Confidence: LOW<br>File: /home/exemple/InsecureCode/CWE89_SQL_Injection__connect_tcp_execute_01.java<br>Code: socket = new Socket(&quot;host.example.org&quot;, 39544);<br>Details: TCP Socket<br>TCP Socket<br>Type: Vulnerability<br>ReferenceHash: f43756ac18b471805a27f2bdc065aeb765cfd59a99c6d0581909204cba69a5f8</pre><pre>==================================================================================</pre><pre>In this analysis, a total of 8 possible vulnerabilities were found and we classified them into:</pre><pre>Total of Vulnerability HIGH is: 7<br>Total of Vulnerability LOW is: 1</pre><pre>==================================================================================</pre><pre>WARN[0036] {HORUSEC_CLI} No authorization token was found, your code it is not going to be sent to horusec. Please enter a token with the -a flag to configure and save your analysis</pre><pre>WARN[0036] [HORUSEC] 8 VULNERABILITIES WERE FOUND IN YOUR CODE SENT TO HORUSEC, TO SEE MORE DETAILS USE THE LOG LEVEL AS DEBUG AND TRY AGAIN</pre><p>Podemos notar que são exibidas diversas informações acerca da execução enquanto a mesma é executada e após finalizado o processo, são exibidas as vulnerabilidades encontradas em um formato padrão:</p><ul><li><strong>Language:</strong> informa a linguagem do trecho de código sendo reportado.</li><li><strong>Severity:</strong> informa a severidade da vulnerabilidade, podendo ser CRITICAL(crítico), <em>HIGH(alto), MEDIUM(médio), LOW(baixo), INFO(vulnerabilidade informativa), </em>NOSEC (Falso positivo) e RISCO ACEITO.</li><li><strong>Line:</strong> linha do código em que a vulnerabilidade foi encontrada.</li><li><strong>Column:</strong> coluna do código em que a vulnerabilidade foi encontrada.</li><li><strong>SecurityTool:</strong> ferramenta de segurança que encontrou a vulnerabilidade.</li><li><strong>Confidence:</strong> mostra o nível de confiança que a ferramenta possui da vulnerabilidade, ou seja, quanto menor o nível maior é a necessidade de uma segunda análise manual.</li><li><strong>File:</strong> exibe o caminho e o arquivo em que a vulnerabilidade foi encontrada.</li><li><strong>Code:</strong> Trecho de código vulnerável</li><li><strong>Details:</strong> exibe uma pequena descrição da vulnerabilidade, podendo conter um link para a classificação cwe mitre da vulnerabilidade.</li><li><strong>Type:</strong> define o tipo de informação retornada, como por exemplo se é uma vulnerabilidade ou apenas uma informação.</li><li><strong>ReferenceHash:</strong> hash única usada para identificar a vulnerabilidade reportada, sendo esta a usada para o caso de querermos eliminar uma vulnerabilidade específica por considera-la um falso positivo.</li></ul><p>Conhecendo os tópicos do relatório, podemos agora tomar como exemplo uma das vulnerabilidades e tentar compreende-la como um todo. Selecionei o seguinte item do relatório:</p><pre>Language: Java<br>Severity: HIGH<br>Line: 115<br>Column: 51<br>SecurityTool: HorusecJava<br>Confidence: LOW<br>File: /home/exemple/InsecureCode/CWE89_SQL_Injection__connect_tcp_execute_01.java<br>Code: users (status) values (&#39;updated&#39;) where name=&#39;&quot;+data+&quot;&#39;&quot;);<br>Details: SQL Injection<br>The input values included in SQL queries need to be passed in safely. Bind variables in prepared statements can be used to easily mitigate the risk of SQL injection. Alternatively to prepare statements, each parameter can be escaped manually. For more information checkout the CWE-89 (<a href="https://cwe.mitre.org/data/definitions/89.html">https://cwe.mitre.org/data/definitions/89.html</a>) advisory.<br>Type: Vulnerability<br>ReferenceHash: 37a7cf46d0838d9c0ac94d025e08cb688601cd05501c8149ec81f3eb84c3db7d</pre><p>Na vulnerabilidade secionada, inicialmente podemos notar que o códifo foi escrito em <em>Java</em> e que foi identificado pela ferramenta <em>HorusecJava</em>, ou seja, uma ferramenta do próprio horus para reconhecimento de falhas de segurança escritos nesta linguagem. Além disso, vemos que a vulnerabilidade é alta porém com o valor de confidence baixo, estando localizado na linha 115 do arquivo <em>CWE89_SQL_Injection__connect_tcp_execute_01.java</em> . Agora, podemos ver que o trecho de código que gerou o alerta foi o seguinte:</p><pre>users (status) values (&#39;updated&#39;) where name=&#39;&quot;+data+&quot;&#39;&quot;);</pre><p>Observando a linha citada e a descrição da vulnerabilidade, notamos que se refere a um risco de <em>SQL Injection</em>, uma vez que estamos passando os valores da <em>query SQL</em> sem nenhum tratamento para garantir que o código não seja burlado com as comuns táticas de <em>SQL injection</em>. Na descrição ainda, observamos que é proposta a solução de utilizar <em>Bind variables</em> (ou variáveis de ligação) ou ainda escapar manualmente os valores para impedir que trechos de código malicioso sejam executados.</p><p>Além dos itens previamente criados, temos como informação complementar o <a href="https://cwe.mitre.org/data/definitions/89.html">link do CWE Mitre</a> correspondente à vulnerabilidade encontrada. Ao acessar o link encontramos uma descrição mais completa da falha de segurança, a relação desta com outras vulnerabilidades reportadas, informações sobre em que plataformas ocorre, o impacto que pode gerar caso explorada, além de exemplos e formas de mitigar. Desta maneira, analisando o CWE disponibilizado podemos encontrar formas comprovadamente seguras para resolver o problema e ainda entender a extensão do impacto que a mesma pode gerar em um código.</p><h3>Conclusão</h3><p>Agora que sabemos como instalar, executar e analisar o código com o Horusec, podemos inserir a análise estática de código em nossas rotinas como desenvolvedores. Além de garantir a qualidade do código com base na análise de segurança, utilizando o horus também podemos promover o aprendizado de boas práticas de programação para que cada vez mais possamos escrever algoritmos melhores e mais seguros. Aproveitem da ferramenta e lembrem-se sempre da possibilidade de contribuir para o crescimento da mesma!</p><p>Caso tenham alguma dúvida ou feedback deixe um comentário, ficarei feliz em escuta-los.</p><h4>Sobre mim</h4><p>Sou a Larissa Fonseca, Analista de segurança na Zup Innovation. Sou apaixonada por segurança da informação e principalmente por participar de capture the flags e amo poder compartilhar meu conhecimento com a comunidade.</p><p><a href="https://www.linkedin.com/in/larissa-fonseca/">Larissa F. - Analista de segurança Jr - Zup Innovation | LinkedIn</a></p><h3>Muito obrigada e até mais ! :)</h3><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=539f9f4a154" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>