politique trop stricte #9

Open
opened 2026-08-29 12:58:57 +00:00 by mathieu · 8 comments
Owner

voici le résultat avec la dernierer version :

Aur (5)                  Ancienne Version  Nouvelle Version  Make Only
aur/brave-bin            1:1.93.138-1      1:1.94.117-1      Non
aur/netbird-ui-bin       0.77.0-1          0.77.1-1          Non
aur/pandoc-bin           3.10.2-1          3.11-1            Non
aur/t3code-bin           0.0.33-1          0.0.36-1          Non
aur/teams-for-linux-bin  2.17.0-1          2.17.1-1          Non

:: Procéder à la relecture ? [O/n]

:: Téléchargement des PKGBUILDs...
 PKGBUILDs à jour
paru-llm-audit · brave-bin 1:1.94.117-1

Model assessment
  REVIEW · MEDIUM risk · 94% confidence · gpt-5.6-luna
  The update appears consistent with an official Brave binary package, but it installs the Chromium sandbox helper setuid root, creating a privileged attack surface that warrants review.

Findings (2)
  [MEDIUM] Known Chromium sandbox helper is installed setuid
    static · PKGBUILD:52
    Evidence: chmod 4755
  [MEDIUM] Setuid sandbox helper
    llm · PKGBUILD:52
    Evidence: PKGBUILD line 52 runs `chmod 4755 "$pkgdir/opt/brave-bin/chrome-sandbox"`; the supplied static findings identify this as a known Chromium sandbox helper installed setuid.

Decision
  REVIEW REJECTED · MEDIUM risk · exit 20
  Build stopped because review was declined or unavailable.

Report
  /home/mathieu/.local/state/paru-llm-audit/reports/20260829T125355Z-brave-bin-5447.json

PARU_LLM_AUDIT_RESULT={"schema_version":1,"pkgbase":"brave-bin","version":"1:1.94.117-1","aggregate_risk":"medium","decision":"review_rejected","exit_code":20,"accepted_interactively":false,"report_path":"/home/mathieu/.local/state/paru-llm-audit/reports/20260829T125355Z-brave-bin-5447.json","error":null}
erreur : échec du lancement : sh -c /usr/bin/paru-llm-audit audit .:
zsh: exit 1     paru
Looking for updates…

il faudrait :

  • que les restrictions soient moins strictes : 4755 est la norme dans ce cas
  • que toutes les output qui impliquent de ne pas poursuivre la mise à jour propose un choix interactif "annuler/mettre à jour/voir les évidence
  • que le blockage pour un paquet ne bloque pas la MAJ des autres paquets
voici le résultat avec la dernierer version : ``` Aur (5) Ancienne Version Nouvelle Version Make Only aur/brave-bin 1:1.93.138-1 1:1.94.117-1 Non aur/netbird-ui-bin 0.77.0-1 0.77.1-1 Non aur/pandoc-bin 3.10.2-1 3.11-1 Non aur/t3code-bin 0.0.33-1 0.0.36-1 Non aur/teams-for-linux-bin 2.17.0-1 2.17.1-1 Non :: Procéder à la relecture ? [O/n] :: Téléchargement des PKGBUILDs... PKGBUILDs à jour paru-llm-audit · brave-bin 1:1.94.117-1 Model assessment REVIEW · MEDIUM risk · 94% confidence · gpt-5.6-luna The update appears consistent with an official Brave binary package, but it installs the Chromium sandbox helper setuid root, creating a privileged attack surface that warrants review. Findings (2) [MEDIUM] Known Chromium sandbox helper is installed setuid static · PKGBUILD:52 Evidence: chmod 4755 [MEDIUM] Setuid sandbox helper llm · PKGBUILD:52 Evidence: PKGBUILD line 52 runs `chmod 4755 "$pkgdir/opt/brave-bin/chrome-sandbox"`; the supplied static findings identify this as a known Chromium sandbox helper installed setuid. Decision REVIEW REJECTED · MEDIUM risk · exit 20 Build stopped because review was declined or unavailable. Report /home/mathieu/.local/state/paru-llm-audit/reports/20260829T125355Z-brave-bin-5447.json PARU_LLM_AUDIT_RESULT={"schema_version":1,"pkgbase":"brave-bin","version":"1:1.94.117-1","aggregate_risk":"medium","decision":"review_rejected","exit_code":20,"accepted_interactively":false,"report_path":"/home/mathieu/.local/state/paru-llm-audit/reports/20260829T125355Z-brave-bin-5447.json","error":null} erreur : échec du lancement : sh -c /usr/bin/paru-llm-audit audit .: zsh: exit 1 paru Looking for updates… ``` il faudrait : - que les restrictions soient moins strictes : 4755 est la norme dans ce cas - que toutes les output qui impliquent de ne pas poursuivre la mise à jour propose un choix interactif "annuler/mettre à jour/voir les évidence - que le blockage pour un paquet ne bloque pas la MAJ des autres paquets
Owner

Pris en charge par la boucle de maintenance (tâche Kanban t_0b76228c, branche prévue fix/issue-9-politique-trop-stricte). Une PR ou une demande de clarification sera liée ici après analyse.

Pris en charge par la boucle de maintenance (tâche Kanban `t_0b76228c`, branche prévue `fix/issue-9-politique-trop-stricte`). Une PR ou une demande de clarification sera liée ici après analyse. <!-- paru-llm-audit-loop:task:t_0b76228c;cursor:1022 -->
Owner

Analyse bloquée sur trois décisions fonctionnelles qu’il ne faut pas deviner :

  1. Pour le cas exact brave-bin + /opt/brave-bin/chrome-sandbox + chmod 4755, faut-il autoriser automatiquement (risque statique faible/aucun), ou conserver une revue interactive mais avec une meilleure UX ? La v0.1.3 le classe déjà medium au lieu de high, mais Luna peut indépendamment conclure medium; la politique actuelle interdit à une exception déterministe d’abaisser ce risque LLM.
  2. Le menu « annuler / mettre à jour / voir les preuves » doit-il permettre « mettre à jour quand même » uniquement pour medium, ou aussi pour high, critical et les erreurs d’audit (timeout, résultat invalide, artefacts modifiés) ? Autoriser ces derniers contredirait le contrat fail-closed actuel.
  3. PreBuildCommand de Paru peut autoriser ou échouer; un échec arrête l’opération entière et ce hook ne sait pas retirer seulement le paquet courant de la transaction. Pour « bloquer un paquet sans bloquer les autres », quel comportement est attendu : (a) afficher une commande de relance avec ce paquet ignoré, (b) changer d’intégration/helper pour disposer d’une exclusion avant transaction, ou (c) autre mécanisme ? Le menu proposé ne contient actuellement pas d’option « ignorer ce paquet et continuer ».

Dès que ces trois choix sont fixés, je peux écrire les tests d’abord et implémenter la politique sans affaiblissement implicite de la barrière de sécurité.

Analyse bloquée sur trois décisions fonctionnelles qu’il ne faut pas deviner : 1. Pour le cas exact `brave-bin` + `/opt/brave-bin/chrome-sandbox` + `chmod 4755`, faut-il **autoriser automatiquement** (risque statique faible/aucun), ou conserver une revue interactive mais avec une meilleure UX ? La v0.1.3 le classe déjà `medium` au lieu de `high`, mais Luna peut indépendamment conclure `medium`; la politique actuelle interdit à une exception déterministe d’abaisser ce risque LLM. 2. Le menu « annuler / mettre à jour / voir les preuves » doit-il permettre « mettre à jour quand même » uniquement pour `medium`, ou aussi pour `high`, `critical` et les erreurs d’audit (timeout, résultat invalide, artefacts modifiés) ? Autoriser ces derniers contredirait le contrat fail-closed actuel. 3. `PreBuildCommand` de Paru peut autoriser ou échouer; un échec arrête l’opération entière et ce hook ne sait pas retirer seulement le paquet courant de la transaction. Pour « bloquer un paquet sans bloquer les autres », quel comportement est attendu : (a) afficher une commande de relance avec ce paquet ignoré, (b) changer d’intégration/helper pour disposer d’une exclusion avant transaction, ou (c) autre mécanisme ? Le menu proposé ne contient actuellement pas d’option « ignorer ce paquet et continuer ». Dès que ces trois choix sont fixés, je peux écrire les tests d’abord et implémenter la politique sans affaiblissement implicite de la barrière de sécurité.
Author
Owner

1: je pense qu'il faut interroger le contexte qui pointe cette situation comme un risque. Par exemple, ce n'est pas une nouveauté dans le paquet, c'est la norme, c'était déjà ainsi la version précédente. Le modèle ne devrait pas flagguer ça comme medium. Par ailleurs, il faut en effet une opération interactive avec une ux simple à cet endroit pour permettre à l'utilisateur de déterminer si on fait la mise a jour ou non.
2: idéalement, l'interaction serait uniquement annuler/voir les preuves (qui ouvrirait un éditeur à l'endroit problématique), et après avoir fermé l'éditeur, proposer annuler/installer.
3: ah merde. Est-ce que c'est implementable autrement dans paru? Sinon, est-ce mieux avec yay?

1: je pense qu'il faut interroger le contexte qui pointe cette situation comme un risque. Par exemple, ce n'est pas une nouveauté dans le paquet, c'est la norme, c'était déjà ainsi la version précédente. Le modèle ne devrait pas flagguer ça comme medium. Par ailleurs, il faut en effet une opération interactive avec une ux simple à cet endroit pour permettre à l'utilisateur de déterminer si on fait la mise a jour ou non. 2: idéalement, l'interaction serait uniquement annuler/voir les preuves (qui ouvrirait un éditeur à l'endroit problématique), et après avoir fermé l'éditeur, proposer annuler/installer. 3: ah merde. Est-ce que c'est implementable autrement dans paru? Sinon, est-ce mieux avec yay?
Owner

Vérification des implémentations stables actuelles effectuée avant de choisir l’intégration : Paru v2.1.0 et Yay v13.0.1.

Conclusion sur le point 3 : changer simplement de Paru à Yay ne résout pas le besoin. Chez Paru, PreBuildCommand est appelé dans une boucle avec propagation immédiate de l’erreur (?) : un refus arrête toute l’opération. Chez Yay, UpgradeSelect sait exclure un paquet, mais intervient avant le téléchargement des dépôts PKGBUILD, donc avant que notre audit puisse inspecter la recette. AURPreInstall intervient au bon moment pour auditer, mais yay.abort() arrête l’installation entière et la documentation précise que modifier la table d’événement ne modifie pas l’état interne de Yay.

Pour continuer les autres paquets après un refus fondé sur la recette, il faut donc soit :

  • A (recommandé, changement minimal) : rester sur Paru; arrêter la transaction refusée et afficher une commande de relance explicite qui ignore le paquet bloqué. Cela demande toutefois de connaître les cibles exactes de la transaction; le hook actuel ne reçoit que PKGBASE/VERSION.
  • B (refonte) : ajouter un wrapper en deux phases qui collecte/audite d’abord toutes les recettes, puis lance Paru/Yay avec la liste des paquets refusés exclue. C’est nettement plus large que le hook actuel. Yay n’élimine pas cette refonte.

Deux décisions restent nécessaires avant un Fixes #9 honnête :

  1. Choisir A (Paru + relance/exclusion explicite) ou B (wrapper deux phases).
  2. Confirmer la frontière de l’option « installer » après affichage des preuves : seulement medium (recommandé), ou aussi high/critical? Je recommande de garder high, critical, erreurs, timeouts, résultat invalide et changement d’artefacts strictement fail-closed.

Note sécurité UX : ouvrir directement un PKGBUILD hostile dans l’éditeur configuré peut activer modelines/plugins. Je recommande un visualiseur texte en lecture seule positionné sur la ligne, puis le menu « annuler / installer », plutôt qu’un éditeur complet. Confirmer si ce visualiseur en lecture seule convient.

Sources exactes consultées : paru.conf(5) et src/install.rs au tag Paru v2.1.0; doc/lua.md au tag Yay v13.0.1.

Vérification des implémentations stables actuelles effectuée avant de choisir l’intégration : Paru v2.1.0 et Yay v13.0.1. Conclusion sur le point 3 : changer simplement de Paru à Yay ne résout pas le besoin. Chez Paru, `PreBuildCommand` est appelé dans une boucle avec propagation immédiate de l’erreur (`?`) : un refus arrête toute l’opération. Chez Yay, `UpgradeSelect` sait exclure un paquet, mais intervient avant le téléchargement des dépôts PKGBUILD, donc avant que notre audit puisse inspecter la recette. `AURPreInstall` intervient au bon moment pour auditer, mais `yay.abort()` arrête l’installation entière et la documentation précise que modifier la table d’événement ne modifie pas l’état interne de Yay. Pour continuer les autres paquets après un refus fondé sur la recette, il faut donc soit : - **A (recommandé, changement minimal)** : rester sur Paru; arrêter la transaction refusée et afficher une commande de relance explicite qui ignore le paquet bloqué. Cela demande toutefois de connaître les cibles exactes de la transaction; le hook actuel ne reçoit que `PKGBASE`/`VERSION`. - **B (refonte)** : ajouter un wrapper en deux phases qui collecte/audite d’abord toutes les recettes, puis lance Paru/Yay avec la liste des paquets refusés exclue. C’est nettement plus large que le hook actuel. Yay n’élimine pas cette refonte. Deux décisions restent nécessaires avant un `Fixes #9` honnête : 1. Choisir A (Paru + relance/exclusion explicite) ou B (wrapper deux phases). 2. Confirmer la frontière de l’option « installer » après affichage des preuves : seulement `medium` (recommandé), ou aussi `high`/`critical`? Je recommande de garder `high`, `critical`, erreurs, timeouts, résultat invalide et changement d’artefacts strictement fail-closed. Note sécurité UX : ouvrir directement un PKGBUILD hostile dans l’éditeur configuré peut activer modelines/plugins. Je recommande un visualiseur texte en lecture seule positionné sur la ligne, puis le menu « annuler / installer », plutôt qu’un éditeur complet. Confirmer si ce visualiseur en lecture seule convient. Sources exactes consultées : `paru.conf(5)` et `src/install.rs` au tag Paru v2.1.0; `doc/lua.md` au tag Yay v13.0.1.
Owner

Classification: clarification required; no code change will be made until the remaining product and safety decisions are explicit. Please answer all three:

  1. Choose A: keep Paru, stop the refused transaction, then show an explicit relaunch/exclusion command; or B: build a broader two-phase audit wrapper that excludes refused packages before installation.
  2. Confirm whether the post-evidence “install” override is limited to medium risk only (recommended), while high/critical, audit errors, timeouts, invalid results, and artifact changes remain fail-closed.
  3. Confirm whether a read-only text viewer positioned on the evidence line is acceptable instead of opening a hostile PKGBUILD in a plugin/modeline-capable editor.

Evidence: Paru PreBuildCommand cannot remove only the current package after recipe audit; Yay UpgradeSelect runs before recipe retrieval, while AURPreInstall aborts the full operation. The existing policy permits confirmation for medium and blocks high/critical. This issue is marked as needing human information until these choices are resolved.

Classification: clarification required; no code change will be made until the remaining product and safety decisions are explicit. Please answer all three: 1. Choose A: keep Paru, stop the refused transaction, then show an explicit relaunch/exclusion command; or B: build a broader two-phase audit wrapper that excludes refused packages before installation. 2. Confirm whether the post-evidence “install” override is limited to medium risk only (recommended), while high/critical, audit errors, timeouts, invalid results, and artifact changes remain fail-closed. 3. Confirm whether a read-only text viewer positioned on the evidence line is acceptable instead of opening a hostile PKGBUILD in a plugin/modeline-capable editor. Evidence: Paru PreBuildCommand cannot remove only the current package after recipe audit; Yay UpgradeSelect runs before recipe retrieval, while AURPreInstall aborts the full operation. The existing policy permits confirmation for medium and blocks high/critical. This issue is marked as needing human information until these choices are resolved.
Owner

Classification: ambiguous. The latest maintainer response still leaves three decisions unresolved, so no code change is safe yet. Please confirm all three:

  1. Choose A: retain Paru and, after a refusal, show an exact relaunch command excluding the refused package; or B: replace the hook-only design with a broader two-phase wrapper that audits all recipes before invoking Paru with refused packages excluded. Yay does not avoid this trade-off.
  2. Confirm that the post-evidence install override is available only for medium risk, while high/critical findings, audit errors, timeouts, invalid model results, and artifact changes remain fail-closed.
  3. Confirm that evidence should open in a read-only text viewer positioned at the relevant line, rather than a plugin/modeline-capable editor for hostile packaging content.

Current-code evidence: the integration is a single Paru PreBuildCommand; _confirm offers only one continue prompt; decision_for blocks high/critical; aggregate risk is the maximum of deterministic and LLM risk. I will not create a regression test or implementation until these product and safety choices are explicit.

Classification: ambiguous. The latest maintainer response still leaves three decisions unresolved, so no code change is safe yet. Please confirm all three: 1. Choose A: retain Paru and, after a refusal, show an exact relaunch command excluding the refused package; or B: replace the hook-only design with a broader two-phase wrapper that audits all recipes before invoking Paru with refused packages excluded. Yay does not avoid this trade-off. 2. Confirm that the post-evidence install override is available only for medium risk, while high/critical findings, audit errors, timeouts, invalid model results, and artifact changes remain fail-closed. 3. Confirm that evidence should open in a read-only text viewer positioned at the relevant line, rather than a plugin/modeline-capable editor for hostile packaging content. Current-code evidence: the integration is a single Paru PreBuildCommand; `_confirm` offers only one continue prompt; `decision_for` blocks high/critical; aggregate risk is the maximum of deterministic and LLM risk. I will not create a regression test or implementation until these product and safety choices are explicit.
Owner

Classification: ambiguous. No code change is safe until the remaining product and safety decisions are explicit. Please confirm all three:

  1. Choose A: keep the Paru hook, stop the refused transaction, and show an exact relaunch command excluding the refused package; or B: build a broader two-phase wrapper that audits all recipes before invoking Paru with refused packages excluded. Yay does not remove this trade-off.
  2. Confirm that the post-evidence install override is limited to medium risk, while high/critical findings, audit errors, timeouts, invalid model results, and artifact changes remain fail-closed.
  3. Confirm that evidence opens in a read-only text viewer positioned at the finding line, rather than a plugin/modeline-capable editor for hostile packaging content.

Current-code evidence: the integration is a single Paru PreBuildCommand; _confirm provides only one continue prompt; decision_for blocks high/critical; aggregate risk is the maximum of deterministic and LLM risk. The branch remains unchanged pending these answers.

Classification: ambiguous. No code change is safe until the remaining product and safety decisions are explicit. Please confirm all three: 1. Choose A: keep the Paru hook, stop the refused transaction, and show an exact relaunch command excluding the refused package; or B: build a broader two-phase wrapper that audits all recipes before invoking Paru with refused packages excluded. Yay does not remove this trade-off. 2. Confirm that the post-evidence install override is limited to medium risk, while high/critical findings, audit errors, timeouts, invalid model results, and artifact changes remain fail-closed. 3. Confirm that evidence opens in a read-only text viewer positioned at the finding line, rather than a plugin/modeline-capable editor for hostile packaging content. Current-code evidence: the integration is a single Paru `PreBuildCommand`; `_confirm` provides only one continue prompt; `decision_for` blocks high/critical; aggregate risk is the maximum of deterministic and LLM risk. The branch remains unchanged pending these answers.
Owner

Classification retenue : ambiguous. La réponse du mainteneur confirme l’objectif, mais ne tranche pas encore les décisions qui changent l’architecture et la frontière de sécurité. Merci de confirmer explicitement les trois choix suivants :

  1. Flux multi-paquets — choisir A : conserver le hook Paru, arrêter la transaction refusée puis afficher une commande exacte de relance excluant le paquet; ou B : construire un wrapper deux phases qui audite toutes les recettes avant d’invoquer Paru avec les paquets refusés exclus. Yay ne supprime pas ce choix : UpgradeSelect est trop tôt et AURPreInstall arrête la transaction.
  2. Override après preuves — confirmer qu’« installer » est disponible uniquement pour le risque medium, tandis que high/critical, erreurs d’audit, timeouts, résultat invalide et mutation d’artefacts restent strictement fail-closed.
  3. Affichage des preuves hostiles — confirmer un visualiseur texte en lecture seule, positionné sur la ligne, plutôt qu’un éditeur susceptible d’activer plugins ou modelines.

État courant vérifié : l’intégration est un unique PreBuildCommand; _confirm n’offre qu’une confirmation oui/non; le risque agrégé est le maximum du statique et du LLM; l’exception Brave chmod 4755 reste medium. Aucun code, test, commit, push ou PR n’est créé avant ces réponses.

Classification retenue : **ambiguous**. La réponse du mainteneur confirme l’objectif, mais ne tranche pas encore les décisions qui changent l’architecture et la frontière de sécurité. Merci de confirmer explicitement les trois choix suivants : 1. **Flux multi-paquets** — choisir **A** : conserver le hook Paru, arrêter la transaction refusée puis afficher une commande exacte de relance excluant le paquet; ou **B** : construire un wrapper deux phases qui audite toutes les recettes avant d’invoquer Paru avec les paquets refusés exclus. Yay ne supprime pas ce choix : `UpgradeSelect` est trop tôt et `AURPreInstall` arrête la transaction. 2. **Override après preuves** — confirmer qu’« installer » est disponible uniquement pour le risque `medium`, tandis que `high`/`critical`, erreurs d’audit, timeouts, résultat invalide et mutation d’artefacts restent strictement fail-closed. 3. **Affichage des preuves hostiles** — confirmer un visualiseur texte en lecture seule, positionné sur la ligne, plutôt qu’un éditeur susceptible d’activer plugins ou modelines. État courant vérifié : l’intégration est un unique `PreBuildCommand`; `_confirm` n’offre qu’une confirmation oui/non; le risque agrégé est le maximum du statique et du LLM; l’exception Brave `chmod 4755` reste `medium`. Aucun code, test, commit, push ou PR n’est créé avant ces réponses.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
2027a/paru-llm-audit#9
No description provided.