fix(api_client,cli): restringir permissoes do material sensivel em disco - #5
Open
marvinrez wants to merge 1 commit into
Open
fix(api_client,cli): restringir permissoes do material sensivel em disco#5marvinrez wants to merge 1 commit into
marvinrez wants to merge 1 commit into
Conversation
Dois pontos gravavam dado sensivel com permissao mais aberta do que precisa. O primeiro sao os arquivos de mTLS. A chave privada do A1 sai do .pfx em PKCS#8 sem criptografia, porque o requests precisa dela assim, e ia para dois NamedTemporaryFile soltos em /tmp - que e world-writable - removidos so no __exit__. Se o processo caisse, ou se o NfseApiClient fosse usado sem o with, a chave ficava em disco. Agora vao para um diretorio proprio criado com mkdtemp (0700), com os arquivos em 0600, removidos no __exit__, no atexit do processo, e tambem se a extracao falhar no meio. O segundo sao as saidas. cli.py criava results/ e gravava com o modo do umask, tipicamente 0755 e 0644 - a DPS assinada, com CNPJ, valores e dados do tomador, e o resultado.json ficavam legiveis por qualquer usuario da maquina. Passam a 0700 e 0600. Nota sobre _mkdir_private: mkdir(parents=True) aplica o modo so ao ultimo nivel, entao os intermediarios sairiam com o padrao do umask. A funcao cria um nivel por vez, e so os que faltam, para nao alterar o modo de diretorios que ja existiam por outro motivo. Cinco testes cobrem os modos dos arquivos de mTLS, a remocao do diretorio ao sair do contexto, senha errada nao deixando diretorio para tras, os modos das saidas do CLI, e um results/ preexistente em 0755 sendo corrigido. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dois pontos gravavam dado sensivel com permissao mais aberta do que precisa.
O primeiro sao os arquivos de mTLS. A chave privada do A1 sai do .pfx em PKCS#8 sem criptografia, porque o requests precisa dela assim, e ia para dois NamedTemporaryFile soltos em /tmp - que e world-writable - removidos so no exit. Se o processo caisse, ou se o NfseApiClient fosse usado sem o with, a chave ficava em disco. Agora vao para um diretorio proprio criado com mkdtemp (0700), com os arquivos em 0600, removidos no exit, no atexit do processo, e tambem se a extracao falhar no meio.
O segundo sao as saidas. cli.py criava results/ e gravava com o modo do umask, tipicamente 0755 e 0644 - a DPS assinada, com CNPJ, valores e dados do tomador, e o resultado.json ficavam legiveis por qualquer usuario da maquina. Passam a 0700 e 0600.
Nota sobre _mkdir_private: mkdir(parents=True) aplica o modo so ao ultimo nivel, entao os intermediarios sairiam com o padrao do umask. A funcao cria um nivel por vez, e so os que faltam, para nao alterar o modo de diretorios que ja existiam por outro motivo.
Cinco testes cobrem os modos dos arquivos de mTLS, a remocao do diretorio ao sair do contexto, senha errada nao deixando diretorio para tras, os modos das saidas do CLI, e um results/ preexistente em 0755 sendo corrigido.