{"id":81,"date":"2024-11-01T13:03:16","date_gmt":"2024-11-01T13:03:16","guid":{"rendered":"https:\/\/fikresekhel.com\/blog\/?p=81"},"modified":"2024-11-01T13:03:16","modified_gmt":"2024-11-01T13:03:16","slug":"por-que-a-seguranca-de-codigo-e-essencial-mesmo-em-ambientes-fechados","status":"publish","type":"post","link":"https:\/\/fikresekhel.com\/blog\/cybersecurity\/por-que-a-seguranca-de-codigo-e-essencial-mesmo-em-ambientes-fechados\/","title":{"rendered":"Por que a Seguran\u00e7a de C\u00f3digo \u00e9 Essencial &#8211; Mesmo em Ambientes Fechados"},"content":{"rendered":"\n<p id=\"ember1470\"><strong>Introdu\u00e7\u00e3o:<\/strong><\/p>\n\n\n\n<p id=\"ember1471\">A seguran\u00e7a de infraestrutura fortalece as aplica\u00e7\u00f5es contra ataques, criando camadas que dificultam a explora\u00e7\u00e3o por agentes mal-intencionados. No entanto, essas medidas, por si s\u00f3, n\u00e3o eliminam completamente as amea\u00e7as, pois atacantes determinados ainda podem explorar vulnerabilidades no c\u00f3digo fonte. Em uma an\u00e1lise recente que fiz conduzida pela FikreSekhel, detectamos uma brecha que revela a import\u00e2ncia da seguran\u00e7a de c\u00f3digo, mostrando como uma vulnerabilidade de escrita de arquivos em uma aplica\u00e7\u00e3o Node.js poderia ser transformada em execu\u00e7\u00e3o remota de c\u00f3digo \u2013 mesmo em um ambiente com sistema de arquivos somente leitura.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1473\">Vulnerabilidades de Escrita de Arquivo Arbitr\u00e1ria<\/h3>\n\n\n\n<p id=\"ember1474\">Durante nossa pesquisa, frequentemente nos deparamos com vulnerabilidades como Cross-Site Scripting (XSS), Inje\u00e7\u00e3o SQL, Desserializa\u00e7\u00e3o Insegura e Server-Side Request Forgery (SSRF). Entre elas, vulnerabilidades de Escrita de Arquivo Arbitr\u00e1ria se destacam por permitir que um atacante comprometa uma aplica\u00e7\u00e3o completamente, uma vez identificadas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1476\">Exemplo de C\u00f3digo Vulner\u00e1vel:<\/h3>\n\n\n\n<p id=\"ember1477\">Abaixo est\u00e1 um trecho de c\u00f3digo encontrado em uma aplica\u00e7\u00e3o de um cliente, que utiliza Node.js:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">app.post('\/upload', (req, res) =&gt; {\n   const { filename, content } = req.body;\n   fs.writeFile(filename, content, () =&gt; {\n       res.json({ message: 'Arquivo carregado com sucesso!' });\n   });\n});<\/pre>\n\n\n\n<p id=\"ember1478\">Nesse exemplo, os par\u00e2metros filename e content s\u00e3o totalmente control\u00e1veis pelo usu\u00e1rio, permitindo que atacantes utilizem a fun\u00e7\u00e3o fs.writeFile para escrever arquivos arbitr\u00e1rios. A vulnerabilidade em quest\u00e3o \u00e9 um ponto cr\u00edtico para execu\u00e7\u00e3o remota de c\u00f3digo, mesmo em um sistema com restri\u00e7\u00f5es severas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1480\">Escrita de Arquivos em Ambientes Endurecidos<\/h3>\n\n\n\n<p id=\"ember1481\">Durante a an\u00e1lise do APP de um cliente, encontramos uma vulnerabilidade de Escrita de Arquivo Arbitr\u00e1ria em um sistema onde a maioria do sistema de arquivos estava montado como somente leitura, restringindo o acesso de escrita a uma pasta de uploads. No entanto, exploramos a quest\u00e3o: <strong>\u00c9 poss\u00edvel transformar uma vulnerabilidade de Escrita de Arquivo Arbitr\u00e1ria em execu\u00e7\u00e3o de c\u00f3digo mesmo em um sistema com acesso de escrita restrito?<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1483\">T\u00e9cnica Utilizada: Aproveitamento de Descritores de Arquivo Abertos<\/h3>\n\n\n\n<p id=\"ember1484\">Em sistemas baseados em Unix, como Linux, o conceito de &#8220;tudo \u00e9 um arquivo&#8221; abre superf\u00edcies de ataque incomuns. Exploramos o sistema virtual procfs, que permite acesso a descritores de arquivos abertos, incluindo pipes an\u00f4nimos utilizados por bibliotecas como o libuv no Node.js.<\/p>\n\n\n\n<p id=\"ember1485\">Um exemplo de como listar descritores de arquivos abertos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">user@host:~$ ls -al \/proc\/`pidof node`\/fd<\/pre>\n\n\n\n<p id=\"ember1486\">Ao explorar descritores abertos, conseguimos alimentar o manipulador de eventos da aplica\u00e7\u00e3o com dados maliciosos e, assim, pavimentar o caminho para a execu\u00e7\u00e3o de c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1488\">Pipes no Node.js e o Manipulador de Eventos<\/h3>\n\n\n\n<p id=\"ember1489\">O Node.js utiliza o libuv para gerenciar um loop de eventos ass\u00edncrono, onde pipes an\u00f4nimos comunicam e sinalizam eventos. Em nosso teste, observamos que, ao escrever dados em pipes atrav\u00e9s de uma vulnerabilidade de escrita, podemos manipular um manipulador de eventos sens\u00edvel e provocar a execu\u00e7\u00e3o de um ponteiro de fun\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1491\">Estrutura de Dados Manipulada<\/h3>\n\n\n\n<p id=\"ember1492\">A estrutura que o manipulador de eventos espera \u00e9 semelhante a esta:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">struct uv_signal_s {\n  UV_HANDLE_FIELDS\n  uv_signal_cb signal_cb;  \/\/ Ponteiro de fun\u00e7\u00e3o que pode ser manipulado\n  int signum;\n};<\/pre>\n\n\n\n<p id=\"ember1493\">Atrav\u00e9s da escrita controlada, conseguimos direcionar o signal_cb para um endere\u00e7o arbitr\u00e1rio, permitindo a execu\u00e7\u00e3o de comandos espec\u00edficos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1495\">Explorando com Correntes ROP (Return-Oriented Programming)<\/h3>\n\n\n\n<p id=\"ember1496\">Como parte do processo, identificamos e utilizamos gadgets ROP dentro do segmento Node.js, o que nos permitiu contornar restri\u00e7\u00f5es de leitura e escrita. Ao construir uma sequ\u00eancia ROP em mem\u00f3ria, executamos uma instru\u00e7\u00e3o controlada pelo atacante, como system(&#8220;touch \/tmp\/pwned&#8221;), comprovando a viabilidade do ataque.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ember1498\">Exemplo de Explora\u00e7\u00e3o com Corrente ROP<\/h3>\n\n\n\n<p id=\"ember1499\">Utilizando o seguinte gadget, conseguimos obter execu\u00e7\u00e3o remota de c\u00f3digo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">0x4354ca1 -&gt; 0x12d0000: pop rsi; pop r15; pop rbp; ret<\/pre>\n\n\n\n<p id=\"ember1500\">Esse gadget, combinado com uma estrutura uv_signal_s falsa, demonstrou o potencial de invas\u00e3o em um sistema supostamente protegido.<\/p>\n\n\n\n<p id=\"ember1502\">Nossa an\u00e1lise reafirmou que, embora hardening de infraestrutura agreguem seguran\u00e7a, eles n\u00e3o substituem uma base de c\u00f3digo segura. Um c\u00f3digo seguro e limpo, com vulnerabilidades resolvidas na sua origem, \u00e9 essencial para evitar que atacantes explorem brechas, especialmente em sistemas cr\u00edticos.<\/p>\n\n\n\n<p id=\"ember1503\"><strong>Na FikreSekhel, focamos na prote\u00e7\u00e3o contra essas e outras amea\u00e7as. Nosso processo de an\u00e1lise de c\u00f3digo e infraestrutura n\u00e3o s\u00f3 identifica vulnerabilidades, mas tamb\u00e9m implementa controles robustos para mitigar ataques complexos.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o: A seguran\u00e7a de infraestrutura fortalece as aplica\u00e7\u00f5es [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":82,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,14,13,10],"tags":[],"class_list":["post-81","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cybersecurity","category-data-science-and-security","category-research","category-secure-coding"],"_links":{"self":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/81","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/comments?post=81"}],"version-history":[{"count":1,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/81\/revisions"}],"predecessor-version":[{"id":83,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/81\/revisions\/83"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media\/82"}],"wp:attachment":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media?parent=81"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/categories?post=81"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/tags?post=81"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}