| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| Avash-0.13.0-1.x86_64.rpm | 2026-09-12 | 16.4 MB | |
| Avash-0.13.0-1.x86_64.rpm.sig | 2026-09-12 | 416 Bytes | |
| avash-0.13.0-windows-x64.zip | 2026-09-12 | 14.2 MB | |
| avash-v0.13.0.intoto.jsonl | 2026-09-12 | 11.8 kB | |
| avash-v0.13.0.spdx.json | 2026-09-12 | 4.1 MB | |
| Avash.app.tar.gz.sig | 2026-09-12 | 404 Bytes | |
| Avash_0.13.0_aarch64.dmg | 2026-09-12 | 12.0 MB | |
| Avash_0.13.0_amd64.AppImage | 2026-09-12 | 90.1 MB | |
| Avash_0.13.0_amd64.AppImage.sig | 2026-09-12 | 416 Bytes | |
| Avash_0.13.0_amd64.deb | 2026-09-12 | 16.4 MB | |
| Avash_0.13.0_x64-setup.exe.sig | 2026-09-12 | 416 Bytes | |
| latest.json | 2026-09-12 | 3.0 kB | |
| SHA256SUMS | 2026-09-12 | 727 Bytes | |
| Avash.app.tar.gz | 2026-09-12 | 11.8 MB | |
| Avash_0.13.0_amd64.deb.sig | 2026-09-12 | 412 Bytes | |
| Avash_0.13.0_x64-setup.exe | 2026-09-12 | 10.4 MB | |
| Avash v0.13.0 source code.tar.gz | 2026-09-12 | 6.2 MB | |
| Avash v0.13.0 source code.zip | 2026-09-12 | 6.7 MB | |
| README.md | 2026-09-12 | 17.3 kB | |
| Totals: 19 Items | 188.4 MB | 0 | |
Avash 0.13.0
Sécurité
- Un texte collé ne peut plus refermer le collage protégé et exécuter une
commande. Le collage encadre le texte des marqueurs du bracketed paste pour
que le shell distant attende une validation. Un presse-papiers qui contenait
lui-même
ESC[201~refermait ce bloc, et le retour chariot suivant exécutait ce qui venait après, même sur un shell protégé, pendant que la modale annonçait sagement « Coller 3 lignes ? ». Le collage retire désormais tous les caractères de contrôle sauf tabulation, retour chariot et saut de ligne. Maj+Inser, Ctrl+Inser, le clic du milieu et le menu du navigateur passent par la même confirmation que Ctrl+Maj+V au lieu d'aller droit au terminal. Le même motif est retiré des snippets (terminal_payload). - Les marqueurs
@revokedet@cert-authoritysont reconnus sur unknown_hostshaché. AvecHashKnownHosts yes, défaut de Debian et d'Ubuntu,ssh-keygen -Hhache aussi les lignes marquées. Avash ne comparait qu'un nom d'hôte en clair : une clé révoquée passait pour un premier contact et était réapprise. Le condensat HMAC-SHA1 est maintenant vérifié pourhôteet[hôte]:port, et une ligne marquée illisible bloque la connexion. - Un mot de passe à saut de ligne est refusé avant d'être mémorisé. Écrit tel
quel dans le protocole du processus de bureau distant, il y injectait des
lignes. Le trousseau refuse désormais tout secret contenant
\n,\rou un octet nul. - Les écritures de configuration ne suivent plus un lien symbolique posé à la place du fichier temporaire. Le temporaire avait un nom prévisible (numéro de processus et compteur) et s'ouvrait en suivant un lien : dans un répertoire partagé, par exemple pour l'export du diagnostic, un autre compte pouvait faire écraser un fichier de la victime. Le nom est désormais aléatoire et le fichier créé en exclusivité.
- Au premier contact sur un profil neuf,
~/.sshnaît en 0700 etknown_hostsen 0600. La bibliothèque SSH les créait avec le masque par défaut, lisibles par les autres comptes, contrairement à ce que promet SECURITY.md. - Les mots de passe sont effacés de la mémoire à leur libération. Ils vivaient dans des chaînes ordinaires, clonées puis relâchées sans effacement : un vidage mémoire conservé par systemd-coredump pouvait en garder la trace.
- Un mot de passe RDP ou VNC à saut de ligne ne peut plus faire désigner un
fichier que l'utilisateur n'a jamais choisi. Le protocole d'entrée du
processus de bureau distant lit une ligne pour le mot de passe puis des
lignes
AUTORISE <chemin>: un mot de passe piégé injectait ses propres désignations, ce quechoix_locauxavait justement été construit pour empêcher. Refusé dès l'écriture (cœur) et avant tout lancement du processus (interface). - Le dossier partagé d'un bureau distant se choisit par la boîte native, plus par un champ texte libre. Un script dans la page pouvait jusque-là faire partager n'importe quel dossier existant (le répertoire personnel compris) en lecture, écriture et suppression. Le champ est désormais en lecture seule, rempli par un bouton « Choisir… » qui appelle la désignation native, avec un bouton pour la retirer.
- L'export du diagnostic ouvre sa propre boîte « Enregistrer sous ». Il acceptait un chemin absolu quelconque venu de la page et remplaçait la cible sans confirmation ; il ouvre désormais lui-même la boîte native.
- Le téléchargement SFTP n'accepte plus un chemin local imposé par la page, un paramètre qu'aucun appel du front n'utilise et qui permettait d'écrire un fichier reçu du serveur n'importe où sur le disque.
- La barrière de contenu de la page est resserrée. La politique de
sécurité du contenu ferme désormais
base-uri,form-actionetframe-src, et ne cite plusws://localhost(le front ne joint que127.0.0.1) ; les capacités accordées à la page se limitent à ce qu'elle utilise réellement (plus de boîtes de fichiers ni d'inspecteur accessibles depuis un script). - Un flux ZGFX ou une image RemoteFX Progressive hostile ne peut plus faire gonfler la mémoire du processus de bureau distant à plusieurs gigaoctets pour quelques centaines de kilooctets reçus : la somme d'un message multi-segments est désormais plafonnée avant décompression, et le chemin progressif applique le même budget que le reste du canal graphique.
- Le repli vers les suites TLS héritées n'accepte plus, sans le dire, un protocole antérieur à TLS 1.2. L'utilisateur consent à d'anciennes suites, pas à un protocole plus ancien : Windows Server 2012 R2, le cas visé, parle TLS 1.2.
- Le mot de passe du processus de bureau distant ne s'accepte plus en
argument de ligne de commande (
-p/--password), lisible dans la liste des processus ; il ne se lit plus que sur l'entrée standard. - Un hôte ou un utilisateur qui ressemble à une option de ligne de commande
ne peut plus être pris pour un drapeau. Le mini-parseur du processus de
bureau distant confondait valeurs et drapeaux selon leur position ; un
utilisateur nommé
--sans-nlafaisait renoncer à NLA sans consentement. - Le canal local du processus de bureau distant n'admet plus une page
servie par un autre service du poste (
http://localhost) dans le binaire publié ; cette exception ne reste ouverte qu'en développement.
Terminal, SSH et SFTP
- Une connexion SSH qui ne répond pas échoue au bout de 30 secondes, par
maillon. Rien ne bornait l'établissement : un hôte derrière un pare-feu qui
jette les paquets laissait l'onglet sur « connexion en cours » deux minutes, et
un service qui accepte la connexion sans jamais parler, pour toujours. Chaque
étape (TCP, bannière et échange de clés, authentification, canal d'un rebond)
a désormais son échéance, le message nomme
hôte:portet l'étape en cause, etAVASH_SSH_DELAIla règle. Un agent SSH muet ne fige plus l'ouverture (3 s). - Les frappes, Ctrl+C compris, passent même quand la sortie sature. Quand le
terminal recevait plus vite qu'il n'affichait, la boucle du canal SSH attendait
pour livrer la sortie et n'écoutait plus le clavier : pendant le
catd'un gros fichier, Ctrl+C restait sans effet jusqu'à la fin. - Les dossiers de petits fichiers ne se transfèrent plus un par un. Chaque petit fichier coûtait cinq allers-retours strictement séquentiels : mille fichiers de 4 Kio à 30 ms d'aller-retour prenaient deux minutes et demie, quel que soit le débit. Quatre fichiers sont désormais en vol, en téléchargement, en envoi et en copie d'hôte à hôte, et un petit fichier lit ses attributs une fois au lieu de deux. Une erreur arrête proprement les autres fichiers, sans laisser de partiel.
- Arrêter un tunnel libère aussitôt son port local. La fermeture n'attendait pas la fin de la tâche d'écoute : relancer le tunnel juste après échouait sur « adresse déjà utilisée ». Pendant l'ouverture d'un tunnel, le bouton devient « Annuler ».
- La file des transferts SFTP ne se reconstruit plus à chaque progression. Elle était refaite toutes les 80 ms : le bouton « Annuler » disparaissait sous le focus et sous le clic, au point de manquer l'annulation d'un transfert rapide. Seuls le texte et la barre de la ligne concernée bougent désormais. La navigation au clavier dans un dossier de dix mille entrées ne touche plus que deux entrées par flèche.
- Un
~/.ssh/configillisible n'est plus confondu avec une configuration vide. Absent, il donne une liste vide ; illisible (droits, encodage), une erreur qui dit pourquoi. DesIncludequi s'incluent mutuellement par motif ne figent plus la liste des hôtes : chaque fichier est lu une fois, 256 au plus. - Petites justesses. Une énumération des ports série qui échoue le dit au
lieu d'annoncer « aucun port ». Une clé privée en 400 ou 700 ne déclenche plus
d'avertissement de droits : OpenSSH ne refuse que si le groupe ou les autres y
ont accès. Déployer un
.pubau texte accentué rend une erreur au lieu de faire tomber la commande. L'échec de la mémorisation du mot de passe d'un tunnel est signalé, comme une progression SFTP indisponible. L'enregistrement asciicast ne fait plus un appel système par bloc reçu.
Bureau distant
- La pastille d'un bureau RDP ou VNC s'éteint quand le serveur coupe. Elle restait verte tant que l'onglet n'était pas fermé à la main, un faux « connecté » exactement contraire au cap du projet. Le titre de fenêtre ne nomme plus non plus un bureau fermé.
- Une reprise ou une redirection en cours de session se voit désormais.
Le sidecar l'annonce (message
[23]), l'onglet repasse en connexion avec « Reprise de la connexion… » au lieu d'un canevas noir sans un mot pendant jusqu'à trente-cinq secondes. - Le presse-papiers d'un bureau distant en arrière-plan n'écrase plus celui du poste pendant qu'on travaille ailleurs : il n'est appliqué qu'au retour sur son onglet.
- Le lecteur partagé résiste à un serveur hostile. Il refuse désormais d'ouvrir plus de 512 fichiers ou dossiers à la fois (au lieu de vider les descripteurs du processus), ne remplace plus un fichier apparu entre-temps au même nom, refuse une position ou une fin de fichier au-delà de l'espace disque libre, un motif d'énumération démesuré, les noms réservés de Windows et une fin de nom par un point ou une espace, et ne laisse plus supprimer le dossier partagé lui-même. Un fichier reçu par le presse-papiers ne peut plus écraser un fichier apparu pendant le transfert. Un texte copié depuis un bureau VNC est désormais borné avant d'être relayé à l'interface, comme il l'était déjà en RDP.
- Fermer l'onglet pendant l'établissement d'un bureau distant est reconnu comme une annulation, plus comme un échec de connexion générique.
- Un bureau en cours de connexion affiche « Connexion à … » avec un bouton Annuler, plutôt qu'un rectangle noir.
- Les liens du terminal (
OSC 8) s'ouvrent par le même chemin que les autres, vers le navigateur du système, plutôt que par la boîte de confirmation intégrée au terminal.
Interface
- L'application publiée écrit désormais un journal
(
~/.config/avash/journal/avash.log, borné à deux fichiers d'un mégaoctet, jamais de secret). Un rapport « l'onglet est resté figé » était jusque-là invérifiable ; les dernières lignes du journal rejoignent l'export du diagnostic. - Un trousseau de mots de passe verrouillé ou indisponible ne fige plus la fenêtre. Les commandes qui l'interrogent, comme celles qui lancent un processus externe, s'exécutent désormais hors du fil qui dessine l'interface ; le mainteneur est prévenu une fois par lancement plutôt que de voir chaque connexion redemander un mot de passe « sans raison ».
- Une panique isolée dans une commande ne condamne plus toutes les suivantes. Les verrous partagés de l'état de l'application se récupèrent désormais même après avoir été laissés dans un état incohérent.
- Un échec au lancement (WebView2 absent, WebKitGTK cassé) se dit clairement au lieu de disparaître silencieusement, surtout sensible sous Windows en version publiée.
- La barre latérale ne se reconstruit plus à chaque changement d'état. Elle recréait jusqu'à toutes ses lignes et leurs écouteurs à l'ouverture d'une session, au changement d'onglet ou à la réception du logo d'un système : sur un grand parc, cela perdait le focus et le défilement, et pouvait faire tomber un double-clic dans le vide pendant qu'une session s'ouvrait. Seules les lignes concernées sont désormais mises à jour.
- Dans un terminal, Ctrl+B et Ctrl+K sont laissés au shell distant (préfixe tmux, effacement readline) ; le panneau SFTP et la palette de commandes s'y ouvrent par Ctrl+Maj+B et Ctrl+Maj+K. Ctrl+Tab, Ctrl+W et Ctrl+1 à Ctrl+9 ne partent plus au shell avant d'agir.
- Fermer un onglet vivant (croix ou Ctrl+W) demande confirmation, comme toutes les autres actions destructrices de l'application ; un réglage « Ne plus demander » est disponible dans la palette.
- Le flux du terminal est désormais régulé entre le cœur et la fenêtre : chaque tranche de sortie est accusée par le front avant l'envoi de la suivante, pour qu'un débit massif (un gros fichier affiché d'un coup) ne fasse plus grossir la file d'attente de la fenêtre sans limite ni retarder un Ctrl+C.
- Petites justesses de l'interface. Les quatre écoutes d'événements posées au démarrage partent désormais en parallèle. La police grasse du terminal ne charge plus qu'à la première session ouverte, et la police régulière est préchargée. Les ascenseurs suivent le thème clair et le curseur ne clignote plus si le système demande moins d'animations. La navigation au clavier dans un dossier SFTP de dix mille entrées ne coûte plus proportionnellement à sa taille, et le tri des noms de fichiers place « fichier2 » avant « fichier10 ». La croix de fermeture d'un onglet et les pastilles de dossier sont plus grandes et visibles au repos.
Chaîne d'intégration et garde-fous
- La clé qui signe les mises à jour n'entre plus dans l'environnement du
build.
cargo tauri buildexécute le code de chaque dépendance (beforeBuildCommand,build.rs, macros procédurales), qui aurait lu la clé d'un simplestd::env::var: une seule dépendance compromise suffisait à signer une mise à jour que tous les postes installés accepteraient. Les bundles sont désormais construits sans aucun secret, et un jobsigner, qui ne compile ni n'installe rien, signe les cinq artefacts de mise à jour.signeretpubliertournent dans l'environnement GitHubrelease, qui peut exiger l'approbation du mainteneur. L'archive macOS de mise à jour est reproduite à l'identique parscripts/archiver-app-macos.sh. - Toutes les commandes cargo des chaînes, de
check.shet du hook sont en--locked, et les outils en version exacte. Sans--locked, cargo pouvait réécrireCargo.locksur l'exécuteur, et le SBOM attesté décrivait un autre graphe que celui livré. tauri-cli 2.11.4, cargo-audit, cargo-deny, tauri-driver, cargo-fuzz, cargo-llvm-cov, cargo-mutants et gitleaks sont épinglés. - Provenance vérifiée avant winget.
winget-manifeste.shtélécharge l'installeur, vérifie son attestation Sigstore et calcule lui-même l'empreinte ;SHA256SUMSest désormais attesté comme les binaires.flathub-sources.shexécute un générateur épinglé et confronte sa sortie aux verrous. - Moins de jetons exposés, moins de faux verdicts. Aucun checkout ne garde le
jeton GitHub dans
.git/config;@claudene répond qu'aux auteurs du dépôt et la revue automatique ignore les PR de fork. L'audit du processus RDP rend le même résultat quel que soit le dossier d'où on le lance, etnpm-audit.shdécide sur le rapport JSON au lieu de prendre un avis de sécurité pour une panne du registre. Quinze nouveaux gardes dansscripts/tests/verrouillent ces règles.
Validation
- Après acceptation du TLS hérité, une coupure remontée par SecureTransport sous macOS reçoit le diagnostic de la seconde tentative, même si son message système est traduit. Le code Apple est reconnu uniquement dans une erreur native-tls ; certificat, NLA et accord utilisateur conservent leurs contrôles. Un test local au backend macOS exerce cette coupure réelle ; le scénario E2E conserve ses assertions et affiche désormais le dernier texte reçu en cas d'échec.
- Le job macOS construit et embarque le vrai processus RDP avant l'interface : le scénario de TLS hérité ne reçoit plus un fichier vide à la place du programme qu'il doit lancer. Les deux scénarios restent exécutés.
- La durée du test d'enregistrement s'exprime en heures pour passer Clippy 1.97.
L'exemption ciblée
unused_async_trait_impl, nécessaire aux signatures de trait imposées depuis Clippy 1.98, est conservée ; le contrôle des clés SSH ne change pas.
Distribution
- Les ressources des polices embarquées incluent les notices des jeux de glyphes Nerd Fonts réellement conservés et leurs sources épinglées. La notice Meslo seule ne décrivait pas ces composants ; les deux fichiers WOFF2 restent identiques.
Vérifier un fichier téléchargé : sha256sum -c SHA256SUMS depuis le dossier de téléchargement, et gh attestation verify <fichier> --repo AdrienAvalon/avash pour sa provenance. La nomenclature logicielle (SBOM, SPDX) est jointe et attestée elle aussi. Mise à jour automatique depuis une version installée : pastille de version, « vérifier les mises à jour ».
Full Changelog: https://github.com/AdrienAvalon/avash/compare/v0.12.2...v0.13.0