<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com a **missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.\\
As capacidades do Linux **fornecem um subconjunto dos privilégios de root disponíveis** para um processo. Isso efetivamente divide os privilégios de root em unidades menores e distintas. Cada uma dessas unidades pode então ser concedida independentemente aos processos. Dessa forma, o conjunto completo de privilégios é reduzido, diminuindo os riscos de exploração.
Vamos supor que estamos executando um processo como um usuário normal. Isso significa que somos não privilegiados. Podemos acessar apenas dados que são de nossa propriedade, do nosso grupo ou que estão marcados para acesso por todos os usuários. Em algum momento, nosso processo precisa de um pouco mais de permissões para cumprir suas funções, como abrir um socket de rede. O problema é que usuários normais não podem abrir um socket, pois isso requer permissões de root.
**CapEff**: O conjunto de capacidades _efetivas_ representa todas as capacidades que o processo está usando no momento (este é o conjunto real de capacidades que o kernel usa para verificações de permissão). Para capacidades de arquivo, o conjunto efetivo é, de fato, um único bit indicando se as capacidades do conjunto permitido serão movidas para o conjunto efetivo ao executar um binário. Isso permite que binários que não estão cientes de capacidades façam uso de capacidades de arquivo sem emitir chamadas de sistema especiais.
**CapPrm**: (_Permitido_) Este é um superconjunto de capacidades que a thread pode adicionar aos conjuntos permitidos ou herdáveis da thread. A thread pode usar a chamada de sistema capset() para gerenciar capacidades: Ela pode descartar qualquer capacidade de qualquer conjunto, mas só pode adicionar capacidades aos seus conjuntos efetivos e herdados da thread que estão no seu conjunto permitido da thread. Consequentemente, ela não pode adicionar nenhuma capacidade ao seu conjunto permitido da thread, a menos que tenha a capacidade cap\_setpcap no seu conjunto efetivo da thread.
**CapInh**: Usando o conjunto _herdado_, todas as capacidades que são permitidas ser herdadas de um processo pai podem ser especificadas. Isso impede que um processo receba quaisquer capacidades de que não precise. Este conjunto é preservado através de um `execve` e geralmente é definido por um processo _recebendo_ capacidades, em vez de por um processo que está distribuindo capacidades para seus filhos.
**CapBnd**: Com o conjunto _limitante_, é possível restringir as capacidades que um processo pode receber. Apenas capacidades que estão presentes no conjunto limitante serão permitidas nos conjuntos herdáveis e permitidos.
**CapAmb**: O conjunto de capacidades _ambiente_ se aplica a todos os binários não-SUID sem capacidades de arquivo. Ele preserva capacidades ao chamar `execve`. No entanto, nem todas as capacidades no conjunto ambiente podem ser preservadas porque são descartadas caso não estejam presentes nos conjuntos herdável ou permitido. Este conjunto é preservado através de chamadas `execve`.
Para uma explicação detalhada da diferença entre capacidades em threads e arquivos e como as capacidades são passadas para threads, leia as seguintes páginas:
Para ver as capacidades de um processo específico, use o arquivo **status** no diretório /proc. Como ele fornece mais detalhes, vamos limitá-lo apenas às informações relacionadas às capacidades do Linux.\
Note que para todos os processos em execução, as informações de capacidade são mantidas por thread, para binários no sistema de arquivos, elas são armazenadas em atributos estendidos.
Você pode encontrar as capacidades do processo atual em `cat /proc/self/status` ou fazendo `capsh --print` e de outros usuários em `/proc/<pid>/status`
Embora isso funcione, existe outra maneira mais fácil. Para ver as capacidades de um processo em execução, simplesmente use a ferramenta **getpcaps** seguida pelo seu ID de processo (PID). Você também pode fornecer uma lista de IDs de processo.
Vamos verificar aqui as capacidades do `tcpdump` após conceder ao binário capacidades suficientes (`cap_net_admin` e `cap_net_raw`) para farejar a rede (_o tcpdump está rodando no processo 9562_):
Como você pode ver, as capacidades dadas correspondem aos resultados das 2 maneiras de obter as capacidades de um binário.
A ferramenta _getpcaps_ usa a chamada de sistema **capget()** para consultar as capacidades disponíveis para uma determinada thread. Esta chamada de sistema só precisa fornecer o PID para obter mais informações.
Binários podem ter capacidades que podem ser usadas durante a execução. Por exemplo, é muito comum encontrar o binário `ping` com a capacidade `cap_net_raw`:
Aparentemente **é possível atribuir capacidades também a usuários**. Isso provavelmente significa que todo processo executado pelo usuário poderá usar as capacidades do usuário.\
Baseado em [isto](https://unix.stackexchange.com/questions/454708/how-do-you-add-cap-sys-admin-permissions-to-user-in-centos-7), [isto](http://manpages.ubuntu.com/manpages/bionic/man5/capability.conf.5.html) e [isto](https://stackoverflow.com/questions/1956732/is-it-possible-to-configure-linux-capabilities-per-user) alguns arquivos precisam ser configurados para conceder a um usuário certas capacidades, mas o arquivo que atribui as capacidades a cada usuário será `/etc/security/capability.conf`.\
Since there is no English text provided to translate, I cannot perform a translation. If you provide the relevant English text, I will be able to translate it into Portuguese for you. Please ensure the text adheres to the guidelines you've specified.
Dentro do **bash executado pelo binário ambient compilado**, é possível observar as **novas capacidades** (um usuário comum não terá nenhuma capacidade na seção "atual").
Os **binários cientes de capacidades não usarão as novas capacidades** concedidas pelo ambiente, no entanto, os **binários ignorantes de capacidades usarão** as mesmas, pois não as rejeitarão. Isso torna os binários ignorantes de capacidades vulneráveis dentro de um ambiente especial que concede capacidades aos binários.
Por padrão, um **serviço executado como root terá todas as capacidades atribuídas**, e em algumas ocasiões isso pode ser perigoso.\
Portanto, um **arquivo de configuração de serviço** permite **especificar** as **capacidades** que você deseja que ele tenha, **e** o **usuário** que deve executar o serviço para evitar rodar um serviço com privilégios desnecessários:
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro efervescente para profissionais de tecnologia e cibersegurança em todas as disciplinas.
Capabilities são úteis quando você **deseja restringir seus próprios processos após realizar operações privilegiadas** (por exemplo, após configurar chroot e vincular a um socket). No entanto, elas podem ser exploradas passando comandos ou argumentos maliciosos que são então executados como root.
Note que é possível atribuir conjuntos de capacidades vazios a um arquivo de programa, e assim é possível criar um programa com set-user-ID-root que altera o set-user-ID efetivo e salvo do processo que executa o programa para 0, mas não confere nenhuma capacidade a esse processo. Ou, em outras palavras, se você tem um binário que:
[**CAP\_SYS\_ADMIN**](https://man7.org/linux/man-pages/man7/capabilities.7.html) é em grande parte uma capacidade abrangente, ela pode facilmente levar a capacidades adicionais ou ao root completo (tipicamente acesso a todas as capacidades). `CAP_SYS_ADMIN` é necessário para realizar uma série de **operações administrativas**, o que é difícil de remover de containers se operações privilegiadas são realizadas dentro do container. Manter essa capacidade é muitas vezes necessário para containers que imitam sistemas inteiros versus containers de aplicações individuais que podem ser mais restritivos. Entre outras coisas, isso permite **montar dispositivos** ou abusar de **release\_agent** para escapar do container.
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
No método anterior, conseguimos acessar o disco do host docker.\
Caso você descubra que o host está executando um servidor **ssh**, você poderia **criar um usuário dentro do disco do host docker** e acessá-lo via SSH:
**Isso significa que você pode escapar do contêiner injetando um shellcode dentro de algum processo em execução no host.** Para acessar processos em execução no host, o contêiner precisa ser executado pelo menos com **`--pid=host`**.
[**CAP\_SYS\_PTRACE**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite o uso de chamadas de sistema `ptrace(2)` e chamadas de sistema de anexação de memória cruzada recentemente introduzidas, como `process_vm_readv(2)` e `process_vm_writev(2)`. Se essa capacidade for concedida e a chamada de sistema `ptrace(2)` em si não for bloqueada por um filtro seccomp, isso permitirá que um atacante contorne outras restrições seccomp, veja [PoC para contornar seccomp se ptrace for permitido](https://gist.github.com/thejh/8346f47e359adecd1d53) ou o **seguinte PoC**:
Se o **GDB** estiver instalado (ou você puder instalá-lo com `apk add gdb` ou `apt install gdb`, por exemplo), você pode **depurar um processo do host** e fazê-lo chamar a função `system`. (Esta técnica também requer a capacidade `SYS_ADMIN`).**
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_sys_ptrace,cap_mknod,cap_audit_write,cap_setfcap
3. Encontre um **programa** para **injetar** o **shellcode** na memória de um processo ([https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c](https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c))
4.**Modifique** o **shellcode** dentro do programa e **compile-o**`gcc inject.c -o inject`
[**CAP_SYS_MODULE**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que o processo carregue e descarregue módulos do kernel arbitrários (chamadas de sistema `init_module(2)`, `finit_module(2)` e `delete_module(2)`). Isso pode levar a uma escalada de privilégios trivial e comprometimento do anel-0. O kernel pode ser modificado à vontade, subvertendo toda a segurança do sistema, Módulos de Segurança Linux e sistemas de contêineres.\
**Isso significa que você pode** **inserir/remover módulos do kernel no/do kernel da máquina host.**
O que significa que é possível usar o comando **`insmod`** para inserir um módulo no kernel. Siga o exemplo abaixo para obter um **reverse shell** abusando desse privilégio.
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_module,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
**O código desta técnica foi copiado do laboratório "Abusing SYS\_MODULE Capability" de** [**https://www.pentesteracademy.com/**](https://www.pentesteracademy.com)
Outro exemplo desta técnica pode ser encontrado em [https://www.cyberark.com/resources/threat-research-blog/how-i-hacked-play-with-docker-and-remotely-ran-code-on-the-host](https://www.cyberark.com/resources/threat-research-blog/how-i-hacked-play-with-docker-and-remotely-ran-code-on-the-host)
[**CAP\_DAC\_READ\_SEARCH**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que um processo **ignore as permissões de leitura de arquivos e as permissões de leitura e execução de diretórios**. Embora tenha sido projetado para ser usado na busca ou leitura de arquivos, também concede ao processo permissão para invocar `open_by_handle_at(2)`. Qualquer processo com a capacidade `CAP_DAC_READ_SEARCH` pode usar `open_by_handle_at(2)` para acessar qualquer arquivo, mesmo arquivos fora do seu namespace de montagem. O identificador passado para `open_by_handle_at(2)` é destinado a ser um identificador opaco obtido usando `name_to_handle_at(2)`. No entanto, este identificador contém informações sensíveis e manipuláveis, como números de inode. Isso foi mostrado pela primeira vez como um problema em contêineres Docker por Sebastian Krahmer com o exploit [shocker](https://medium.com/@fun\_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3).\
**Isso significa que você pode** **ignorar as verificações de permissão de leitura de arquivos e as verificações de permissão de leitura/execução de diretórios.**
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
Dentro da saída anterior, você pode ver que a capacidade **DAC\_READ\_SEARCH** está habilitada. Como resultado, o container pode **depurar processos**.
Você pode aprender como a exploração a seguir funciona em [https://medium.com/@fun\_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3](https://medium.com/@fun\_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3), mas em resumo, **CAP\_DAC\_READ\_SEARCH** não apenas nos permite atravessar o sistema de arquivos sem verificações de permissão, mas também remove explicitamente quaisquer verificações para _**open\_by\_handle\_at(2)**_ e **poderia permitir que nosso processo acesse arquivos sensíveis abertos por outros processos**.
O exploit original que abusa dessas permissões para ler arquivos do host pode ser encontrado aqui: [http://stealth.openwall.net/xSports/shocker.c](http://stealth.openwall.net/xSports/shocker.c), a seguir está uma **versão modificada que permite indicar o arquivo que você deseja ler como primeiro argumento e despejá-lo em um arquivo.**
Um exploit precisa encontrar um ponteiro para algo montado no host. O exploit original usava o arquivo /.dockerinit e esta versão modificada usa /etc/hostname. Se o exploit não estiver funcionando, talvez você precise definir um arquivo diferente. Para encontrar um arquivo que está montado no host, basta executar o comando mount:
**O código desta técnica foi copiado do laboratório "Abusing DAC\_READ\_SEARCH Capability" de** [**https://www.pentesteracademy.com/**](https://www.pentesteracademy.com)
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
Há muitos arquivos que você pode **sobrescrever para escalar privilégios,** [**você pode obter ideias daqui**](payloads-to-execute.md#overwriting-a-file-to-escalate-privileges).
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
Primeiro, leia a seção anterior que [**abusa da capacidade DAC\_READ\_SEARCH para ler arquivos arbitrários**](linux-capabilities.md#cap\_dac\_read\_search) do host e **compile** o exploit.
Depois, **compile a seguinte versão do exploit shocker** que permitirá a você **escrever arquivos arbitrários** no sistema de arquivos do host:
Para escapar do container do docker, você pode **baixar** os arquivos `/etc/shadow` e `/etc/passwd` do host, **adicionar** a eles um **novo usuário**, e usar **`shocker_write`** para sobrescrevê-los. Em seguida, **acessar** via **ssh**.
**O código desta técnica foi copiado do laboratório "Abusing DAC\_OVERRIDE Capability" de** [**https://www.pentesteracademy.com**](https://www.pentesteracademy.com)
Vamos supor que o binário **`python`** tenha essa capacidade, você pode **alterar** o **proprietário** do arquivo **shadow**, **alterar a senha do root**, e escalar privilégios:
Há muitos arquivos que você pode **sobrescrever para escalar privilégios,** [**você pode obter ideias daqui**](payloads-to-execute.md#overwriting-a-file-to-escalate-privileges).
Uma vez que você encontrar um arquivo que possa abusar (através de leitura ou escrita) para escalar privilégios, você pode **obter um shell se passando pelo grupo de interesse** com:
Se o **docker** estiver instalado, você poderia **se passar** pelo **grupo docker** e abusar dele para se comunicar com o [**socket do docker** e escalar privilégios](./#writable-docker-socket).
O trecho fornecido não contém texto suficiente para tradução. Por favor, forneça o texto relevante em inglês que você deseja que seja traduzido para o português.
Uma vez que você tenha a [capacidade SETUID](linux-capabilities.md#cap\_setuid), você pode ir para a seção correspondente para ver como escalar privilégios.
Esta capacidade permite **conceder qualquer outra capacidade a binários**, então poderíamos pensar em **escapar** do container **abusando de qualquer outro breakout de capacidade** mencionado nesta página.\
No entanto, se você tentar conceder, por exemplo, as capacidades CAP\_SYS\_ADMIN e CAP\_SYS\_PTRACE ao binário gdb, você descobrirá que pode concedê-las, mas o **binário não será capaz de executar após isso**:
Após investigar, li isto: _Permitted: Este é um **conjunto superset limitante para as capacidades efetivas** que a thread pode assumir. É também um conjunto superset limitante para as capacidades que podem ser adicionadas ao conjunto hereditário por uma thread que **não possui a capacidade CAP\_SETPCAP** no seu conjunto efetivo._\
Parece que as capacidades Permitted limitam as que podem ser usadas.\
No entanto, na documentação desta capacidade: _CAP\_SETPCAP : \[…] **adicionar qualquer capacidade do conjunto limitante da thread chamadora** ao seu conjunto hereditário._\
Parece que só podemos adicionar ao conjunto hereditário capacidades do conjunto limitante. O que significa que **não podemos colocar novas capacidades como CAP\_SYS\_ADMIN ou CAP\_SYS\_PTRACE no conjunto hereditário para escalar privilégios**.
[**CAP\_SYS\_RAWIO**](https://man7.org/linux/man-pages/man7/capabilities.7.html) fornece uma série de operações sensíveis, incluindo acesso a `/dev/mem`, `/dev/kmem` ou `/proc/kcore`, modificar `mmap_min_addr`, acessar chamadas de sistema `ioperm(2)` e `iopl(2)`, e vários comandos de disco. O `FIBMAP ioctl(2)` também é habilitado por meio desta capacidade, o que causou problemas no [passado](http://lkml.iu.edu/hypermail/linux/kernel/9907.0/0132.html). Conforme a página do manual, isso também permite ao detentor `realizar uma gama de operações específicas do dispositivo em outros dispositivos`.
Vamos supor que o binário **`python`** tenha essa capacidade. Se você pudesse **também modificar alguma configuração de serviço ou socket** (ou qualquer arquivo de configuração relacionado a um serviço), você poderia instalar uma porta dos fundos, e então matar o processo relacionado a esse serviço e esperar pelo novo arquivo de configuração ser executado com sua porta dos fundos.
Se você possui capacidades de kill e há um **programa node executando como root** (ou como um usuário diferente), você provavelmente poderá **enviar** o **sinal SIGUSR1** e fazer com que ele **abra o depurador do node** ao qual você pode se conectar.
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
**Isso significa que é possível escutar em qualquer porta (inclusive nas privilegiadas).** Você não pode escalar privilégios diretamente com essa capacidade.
Se **`python`** tiver essa capacidade, ele poderá escutar em qualquer porta e até se conectar a partir dela para qualquer outra porta (alguns serviços exigem conexões de portas privilegiadas específicas)
[**CAP\_NET\_RAW**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que um processo possa **criar tipos de soquete RAW e PACKET** para os namespaces de rede disponíveis. Isso permite a geração e transmissão de pacotes arbitrários através das interfaces de rede expostas. Em muitos casos, essa interface será um dispositivo Ethernet virtual que pode permitir que um **container comprometido****forje****pacotes** em várias camadas de rede. Um processo malicioso ou container comprometido com essa capacidade pode injetar em uma ponte upstream, explorar o roteamento entre containers, contornar controles de acesso à rede e, de outra forma, adulterar a rede do host se um firewall não estiver em vigor para limitar os tipos de pacotes e conteúdos. Por fim, essa capacidade permite que o processo se vincule a qualquer endereço dentro dos namespaces disponíveis. Essa capacidade é frequentemente retida por containers privilegiados para permitir que o ping funcione usando soquetes RAW para criar solicitações ICMP a partir de um container.
O exemplo a seguir é código **`python2`** que pode ser útil para interceptar o tráfego da interface "**lo**" (**localhost**). O código é do laboratório "_The Basics: CAP-NET\_BIND + NET\_RAW_" de [https://attackdefense.pentesteracademy.com/](https://attackdefense.pentesteracademy.com)
[**CAP\_NET\_ADMIN**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que o detentor da capacidade **modifique o firewall dos namespaces de rede expostos, tabelas de roteamento, permissões de socket**, configuração de interface de rede e outras configurações relacionadas em interfaces de rede expostas. Isso também fornece a habilidade de **ativar o modo promíscuo** para as interfaces de rede conectadas e potencialmente farejar através de namespaces.
[**CAP\_SYS\_CHROOT**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite o uso da chamada de sistema `chroot(2)`. Isso pode permitir a fuga de qualquer ambiente `chroot(2)`, utilizando fraquezas e métodos de escape conhecidos:
* [Como escapar de várias soluções chroot](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf)
* [chw00t: ferramenta de escape chroot](https://github.com/earthquake/chw00t/)
[**CAP\_SYS\_BOOT**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite o uso da chamada de sistema `reboot(2)`. Também permite a execução de um **comando de reinicialização** arbitrário via `LINUX_REBOOT_CMD_RESTART2`, implementado para algumas plataformas de hardware específicas.
Esta capacidade também permite o uso da chamada de sistema `kexec_load(2)`, que carrega um novo kernel de emergência e, a partir do Linux 3.17, o `kexec_file_load(2)`, que também carrega kernels assinados.
[CAP\_SYSLOG](https://man7.org/linux/man-pages/man7/capabilities.7.html) foi finalmente separado do `CAP_SYS_ADMIN` no Linux 2.6.37, esta capacidade permite que o processo use a chamada de sistema `syslog(2)`. Isso também permite que o processo visualize endereços do kernel expostos via `/proc` e outras interfaces quando `/proc/sys/kernel/kptr_restrict` está definido como 1.
A configuração `kptr_restrict` sysctl foi introduzida no 2.6.38 e determina se os endereços do kernel são expostos. Isso é padrão para zero (expondo endereços do kernel) desde o 2.6.39 no kernel vanilla, embora muitas distribuições definam corretamente o valor para 1 (ocultar de todos exceto uid 0) ou 2 (sempre ocultar).
Além disso, esta capacidade também permite que o processo visualize a saída do `dmesg`, se a configuração `dmesg_restrict` for 1. Finalmente, a capacidade `CAP_SYS_ADMIN` ainda é permitida para realizar operações de `syslog` por razões históricas.
[CAP\_MKNOD](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite um uso estendido de [mknod](https://man7.org/linux/man-pages/man2/mknod.2.html) ao permitir a criação de algo além de um arquivo comum (`S_IFREG`), FIFO (pipe nomeado)(`S_IFIFO`), ou socket de domínio UNIX (`S_IFSOCK`). Os arquivos especiais são:
É uma capacidade padrão ([https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L6-L19](https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L6-L19)).
#Because of user namespace sharing, the unprivileged user have access to the container filesystem, and so the created block special file pointing on /dev/sda
**`CAP_SETPCAP`** é uma capacidade do Linux que permite a um processo **modificar os conjuntos de capacidades de outro processo**. Concede a habilidade de adicionar ou remover capacidades dos conjuntos de capacidades efetivas, herdáveis e permitidas de outros processos. No entanto, existem certas restrições sobre como essa capacidade pode ser usada.
Um processo com `CAP_SETPCAP`**só pode conceder ou remover capacidades que estão em seu próprio conjunto de capacidades permitidas**. Em outras palavras, um processo não pode conceder uma capacidade a outro processo se ele mesmo não possuir essa capacidade. Essa restrição impede que um processo eleve os privilégios de outro processo além do seu próprio nível de privilégio.
Além disso, em versões recentes do kernel, a capacidade `CAP_SETPCAP` foi **mais restrita**. Ela não permite mais que um processo modifique arbitrariamente os conjuntos de capacidades de outros processos. Em vez disso, **só permite que um processo reduza as capacidades em seu próprio conjunto de capacidades permitidas ou no conjunto de capacidades permitidas de seus descendentes**. Essa mudança foi introduzida para reduzir potenciais riscos de segurança associados à capacidade.
Para usar `CAP_SETPCAP` efetivamente, você precisa ter a capacidade em seu conjunto de capacidades efetivas e as capacidades alvo em seu conjunto de capacidades permitidas. Você pode então usar a chamada de sistema `capset()` para modificar os conjuntos de capacidades de outros processos.
Em resumo, `CAP_SETPCAP` permite que um processo modifique os conjuntos de capacidades de outros processos, mas não pode conceder capacidades que ele mesmo não possui. Além disso, devido a preocupações de segurança, sua funcionalidade foi limitada em versões recentes do kernel para permitir apenas a redução de capacidades em seu próprio conjunto de capacidades permitidas ou nos conjuntos de capacidades permitidas de seus descendentes.
**A maioria desses exemplos foi tirada de alguns laboratórios de** [**https://attackdefense.pentesteracademy.com/**](https://attackdefense.pentesteracademy.com), então se você quiser praticar essas técnicas de privesc, recomendo esses laboratórios.
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).