{"id":190,"date":"2025-04-04T12:06:45","date_gmt":"2025-04-04T12:06:45","guid":{"rendered":"https:\/\/fikresekhel.com\/blog\/?p=190"},"modified":"2025-04-04T12:14:10","modified_gmt":"2025-04-04T12:14:10","slug":"o-velho-problema-das-permissoes-no-apache-sim-ainda-acontece","status":"publish","type":"post","link":"https:\/\/fikresekhel.com\/blog\/pentesting\/o-velho-problema-das-permissoes-no-apache-sim-ainda-acontece\/","title":{"rendered":"O velho problema das permiss\u00f5es no Apache: sim, ainda acontece."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Na FikreSekhel, a gente respira pentesting. Todo dia, analisamos sistemas dos mais variados \u2013 de startups promissoras at\u00e9 empresas gigantes do varejo online. E, mesmo em 2025, <strong><em>ainda encontramos erros de configura\u00e7\u00e3o no Apache dignos dos anos 2000<\/em>.<\/strong> S\u00e9rio. \ud83d\ude2c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hoje queremos falar de um ponto que parece simples, mas que ainda d\u00e1 muita dor de cabe\u00e7a: <strong>erros de permiss\u00f5es e controle de acesso mal configurado no Apache<\/strong>, seja via <code>.htaccess<\/code>, seja no <code>apache2.conf<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O b\u00e1sico que muita gente ainda erra<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O Apache permite controlar o acesso a diret\u00f3rios e arquivos sens\u00edveis atrav\u00e9s de dois mecanismos principais:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arquivos <code>.htaccess<\/code>, colocados em diret\u00f3rios espec\u00edficos.<\/li>\n\n\n\n<li>Arquivo global de configura\u00e7\u00e3o: <code>apache2.conf<\/code> (ou <code>httpd.conf<\/code>, dependendo da distro).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">E a\u00ed, come\u00e7a o festival de erros:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>.htaccess<\/code> liberando o diret\u00f3rio <code>\/admin\/<\/code> para o mundo inteiro.<\/li>\n\n\n\n<li>Falta de diretivas como <code>Require all denied<\/code> em pastas que deveriam estar inacess\u00edveis.<\/li>\n\n\n\n<li>Diret\u00f3rios de <strong>backup de desenvolvimento<\/strong> expostos (tipo <code>\/old_site<\/code>, <code>\/v2<\/code>, <code>\/dev<\/code>, etc.). Sim, chegamos a conseguir realizar o download do site INTEIRO!<\/li>\n\n\n\n<li><code>DirectoryIndex<\/code> apontando para scripts vulner\u00e1veis ou expostos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Case: Loja virtual &#8220;TopTenStore&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Durante um pentest recente numa loja virtual que chamaremos de <strong>TopTenStore<\/strong>, encontramos o seguinte cen\u00e1rio:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A loja usava <code>.htaccess<\/code> para controle de diret\u00f3rios administrativos.<\/li>\n\n\n\n<li>Mas esqueceram de negar o acesso a um diret\u00f3rio chamado <code>\/backups\/<\/code>, que continha <strong>backups completos do banco de dados<\/strong>, salvos em <code>.sql.gz<\/code>. \ud83d\ude31<\/li>\n\n\n\n<li>Um simples <em>Google dork<\/em> revelou a URL direta para o arquivo.<\/li>\n\n\n\n<li>Fizemos o download, extra\u00edmos o conte\u00fado&#8230; e pronto: usu\u00e1rios, senhas (algumas sem hash!), e todos os pedidos da loja nos \u00faltimos 2 anos.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Outro erro comum: <code>AllowOverride None<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Outro cl\u00e1ssico \u00e9 o uso do <code>AllowOverride None<\/code> no <code>apache2.conf<\/code>, que basicamente <strong>ignora completamente os <code>.htaccess<\/code><\/strong>. Ou seja: o admin coloca um <code>.htaccess<\/code> bonitinho com restri\u00e7\u00f5es, mas o Apache ignora tudo porque n\u00e3o foi configurado para \u201crespeitar\u201d o arquivo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tudo isso por causa de um <code>.htaccess<\/code> ausente e uma configura\u00e7\u00e3o de diret\u00f3rio permissiva demais no <code>apache2.conf<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd25 <strong>Erros comuns no <code>.htaccess<\/code><\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Falta de <code>Deny from all<\/code> ou <code>Require all denied<\/code><\/strong><br>Diret\u00f3rios sens\u00edveis ficam acess\u00edveis publicamente por padr\u00e3o.<\/li>\n\n\n\n<li><strong>Permitir acesso ao diret\u00f3rio <code>\/admin\/<\/code> sem autentica\u00e7\u00e3o<\/strong><br>Qualquer pessoa pode acessar o painel administrativo.<\/li>\n\n\n\n<li><strong>Expor diret\u00f3rios de backup ou dev (<code>\/backup\/<\/code>, <code>\/old\/<\/code>, <code>\/dev\/<\/code>)<\/strong><br>Muitas vezes cont\u00eam c\u00f3digos antigos, senhas ou bancos de dados.<\/li>\n\n\n\n<li><strong>N\u00e3o desabilitar listagem de diret\u00f3rios (<code>Options Indexes<\/code>)<\/strong><br>Isso permite que o atacante veja todos os arquivos do diret\u00f3rio.<\/li>\n\n\n\n<li><strong>Falta de restri\u00e7\u00e3o por IP para diret\u00f3rios cr\u00edticos<\/strong><br>Especialmente em <code>\/admin<\/code>, <code>\/phpmyadmin<\/code>, <code>\/painel<\/code>, etc.<\/li>\n\n\n\n<li><strong>Permitir execu\u00e7\u00e3o de scripts em diret\u00f3rios de upload<\/strong><br>Usu\u00e1rio envia um <code>.php<\/code> malicioso e executa direto no servidor.<\/li>\n\n\n\n<li><strong>Header de seguran\u00e7a ausentes (como <code>X-Frame-Options<\/code>, <code>Content-Security-Policy<\/code>, etc.)<\/strong><br>Facilita ataques de clickjacking, XSS e outros.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd25 <strong>Erros comuns no <code>apache2.conf<\/code> (ou <code>httpd.conf<\/code>)<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>AllowOverride None<\/code> em diret\u00f3rios onde <code>.htaccess<\/code> \u00e9 necess\u00e1rio<\/strong><br>Faz o Apache ignorar completamente as regras do <code>.htaccess<\/code>.<\/li>\n\n\n\n<li><strong><code>Options +Indexes<\/code> ativado globalmente<\/strong><br>Permite listagem de todos os diret\u00f3rios n\u00e3o protegidos.<\/li>\n\n\n\n<li><strong>Permiss\u00f5es globais excessivas (<code>Require all granted<\/code>)<\/strong><br>Pode abrir demais o acesso ao site inteiro.<\/li>\n\n\n\n<li><strong>Diret\u00f3rios sens\u00edveis mal configurados (<code>&lt;Directory \/var\/www\/html\/secret><\/code> sem restri\u00e7\u00f5es)<\/strong><br>Facilita a descoberta de recursos internos.<\/li>\n\n\n\n<li><strong>Falta de configura\u00e7\u00e3o de logs de erro e acesso<\/strong><br>Dificulta a detec\u00e7\u00e3o de invas\u00f5es e tentativas de explora\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>M\u00e1 configura\u00e7\u00e3o do <code>DirectoryIndex<\/code><\/strong><br>Pode fazer com que arquivos sens\u00edveis (ex: <code>index_old.php<\/code>) sejam carregados por padr\u00e3o.<\/li>\n\n\n\n<li><strong>N\u00e3o limitar m\u00e9todos HTTP (<code>LimitExcept GET POST<\/code>)<\/strong><br>Permitir m\u00e9todos como <code>PUT<\/code>, <code>DELETE<\/code> ou <code>TRACE<\/code> pode ser um desastre.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Baixe nosso checklist enviando um email para: contato@fikresekhel.com, dizendo: Eu quero o checklist do Apache!<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">T\u00e1 na hora de revisar isso a\u00ed, n\u00e9?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea tem um site, uma aplica\u00e7\u00e3o, ou mesmo um painel administrativo rodando em Apache, <strong>vale a pena fazer uma checagem completa nas permiss\u00f5es, nos arquivos <code>.htaccess<\/code> e nas diretivas do <code>apache2.conf<\/code><\/strong>. A maioria dos ataques de explora\u00e7\u00e3o que vemos nesse cen\u00e1rio s\u00e3o <strong>automatizados<\/strong>, e os bots n\u00e3o perdoam.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quer saber se seu sistema tamb\u00e9m tem esses vacilos?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na <strong>FikreSekhel<\/strong>, oferecemos uma <strong>avalia\u00e7\u00e3o gratuita de seguran\u00e7a b\u00e1sica<\/strong>. Em poucas horas, conseguimos detectar se h\u00e1 riscos evidentes na sua configura\u00e7\u00e3o Apache (e em outras partes cr\u00edticas do seu sistema).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcec <strong>Entre em contato agora mesmo<\/strong> e descubra o que os invasores j\u00e1 podem estar vendo no seu sistema sem voc\u00ea saber.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 <strong><a>contato@fikresekhel.com<\/a><\/strong><br>\ud83d\udd0d Ou, se preferir, fale conosco pelo nosso whatsapp (11) 991375342<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na FikreSekhel, a gente respira pentesting. Todo dia, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":191,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,29,10,27],"tags":[],"class_list":["post-190","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pentesting","category-pesquisa","category-secure-coding","category-treinamento"],"_links":{"self":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/190","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=190"}],"version-history":[{"count":2,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"predecessor-version":[{"id":194,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/190\/revisions\/194"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media\/191"}],"wp:attachment":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}