| 00:07:03 | | xkey quits [Quit: WeeChat 4.9.0] |
| 00:07:31 | | xkey (xkey) joins |
| 00:14:09 | | etnguyen03 (etnguyen03) joins |
| 00:38:11 | | Mateon2 joins |
| 00:40:34 | | Mateon1 quits [Ping timeout: 268 seconds] |
| 00:40:34 | | Mateon2 is now known as Mateon1 |
| 00:48:53 | | Yakov (Yakov) joins |
| 01:07:55 | | multisn8 quits [Quit: WeeChat 4.9.0] |
| 01:57:19 | <nicolas17> | nulldata: github actions strikes again? |
| 01:58:14 | <nicolas17> | https://nesbitt.io/2026/04/28/github-actions-is-the-weakest-link.html |
| 02:11:53 | | lukash984 joins |
| 02:50:30 | | steering|m leaves [User left] |
| 03:00:05 | | etnguyen03 quits [Remote host closed the connection] |
| 03:36:01 | <Yakov> | just looked through that blog, looks like a lot of user-error |
| 03:37:25 | <Yakov> | i understand if a dependency repo is already hijacked and its only derived externally by tag and not by git hash (like most github workflows) then something malicious can be pushed |
| 03:38:39 | <Yakov> | however using secrets within a pull_request_target (which is unsafe since it can be triggered by anyone) or not sanitizing a bash echo from a issue_comment trigger is just absurd |
| 03:40:01 | <egallager> | how many of these mistakes can actionlint catch? https://github.com/rhysd/actionlint |
| 03:41:15 | <nicolas17> | egallager: he recommends https://docs.zizmor.sh/ |
| 03:41:29 | <Yakov> | Maybe people should just get the memo to stop vibecoding your workflows |
| 03:42:26 | <nicolas17> | but "it’s a slightly uncomfortable thing to say about the platform when the best available defence for GitHub Actions is a third-party linter maintained largely by one person that catches footguns GitHub put there and could remove" |
| 03:42:38 | <Yakov> | i've personally never tried actionlint or zizmor so i don't know how well it works but i know there are good hardening techniques you can apply on your workflow to ensure it's safe and prevent supply chain attacks (e.g. like targeting by git hash) |
| 03:43:29 | <nicolas17> | i've personally never tried github actions :p |
| 03:46:11 | <egallager> | oh wow, zizmore is a lot more verbose than actionlint is... |
| 03:47:06 | <Yakov> | it all boils down to 1-3 things, being wary of your scoped workflows permissions (and that is only if you use unsafe triggers), how you're targeting your depends, and what secrets you utilize (and that is also only if you use unsafe triggers) |
| 03:47:22 | <nicolas17> | reading that article + https://nesbitt.io/2025/12/06/github-actions-package-manager.html leaves me feeling like this is the C language |
| 03:47:28 | <nicolas17> | yes you *can* write secure code, but... |
| 03:47:50 | <Yakov> | it's 3 things that are VERY easy to look out for |
| 03:49:59 | <Yakov> | A good example will be https://github.com/dani-garcia/vaultwarden/blob/main/.github/workflows/release.yml, they use empty permission scopes, they hardcode dependency git hashes instead of referencing by tag, and they use secrets within specific environments |
| 03:51:18 | <Yakov> | cool, looks like they also automatically generate a report using zizmor |
| 03:53:26 | <Yakov> | they are going the extra mile since their workflow is already secure and they technically don't even need to rely on a third-party linter however this protects them by auditing future workflow changes |
| 03:54:10 | <steering> | Yakov: this problem long predates vibecoding, though |
| 03:54:55 | <steering> | if its hard to get right people will get it wrong |
| 03:55:02 | <Yakov> | maybe but it's still caused by user-error by not following basic security protocols |
| 03:55:24 | <Yakov> | i don't think it's hard, it's just the right way to do it and people don't like doing it the right way |
| 03:55:32 | <steering> | so is heartbleed ;) |
| 03:55:35 | <nicolas17> | this feels just like "the C programmer should have just checked the buffer bounds" |
| 03:55:39 | <steering> | ^^^ |
| 03:56:14 | <Yakov> | its not, i'd say it's more analogous to keeping the default password of your root user with ssh opened |
| 03:56:19 | <steering> | i dont know what a good fix is - other than maybe things like just providing the environment variables as actual environment variables or something? |
| 03:57:04 | <steering> | i don't think you can say it's not hard when people get it wrong all the time. |
| 03:57:08 | <steering> | ¯\_(ツ)_/¯ |
| 03:57:22 | <Yakov> | it's because it's fast and simple and it gets the job done |
| 03:57:28 | <Yakov> | being lazy != hard |
| 03:57:30 | <steering> | i don't think driving is hard, it's just the right way to do it and people don't like doing it the right way :) |
| 03:58:58 | <Yakov> | well yes, people get distracted and slack off, i don't think that's a good example though since a persons skills can decline while code stays the same |
| 04:00:05 | <Yakov> | provided there aren't any inherent security flaws as shown in the blog |
| 04:01:51 | <Yakov> | If you used Github workflows before, I think you'd agree with me that it's more equivalent to not changing the default password on your Linux machine than not checking buffer bounds (buffer bounds can be in unlimited places and in unlimited forms, while in a YAML workflow there's only one place to either write it right or wrong) |
| 04:04:40 | <pabs> | the good fix is to get a job at GitHub so you can fix their system to not have sharp edges :) |
| 04:07:52 | <Yakov> | You can never fix it because it's solely based off bad coding practices and you can't fix bad coding practices |
| 04:09:05 | <Yakov> | GitHub can choose to add more automatic scanners or linters that look out for this but that is something people should appreciate and not take for granted |
| 04:10:07 | <Yakov> | At the end of the day a programmer has free choice and I don't think it's at the fault of Github at all |
| 04:10:25 | <egallager> | anyways GH just so happens to be pushing a survey re: actions on me: https://survey3.medallia.com/?actions&id=1388660 |
| 04:12:51 | <pabs> | just make GitHub Actions v2 that doesn't you let you do unsafe shit |
| 04:13:45 | <Yakov> | aka Rust |
| 04:13:52 | <Yakov> | /j |
| 04:18:44 | <pabs> | Rust doesn't go far enough, you need something beyond Haskell. like Idris2 or Lean or Rocq/Coq or other formal methods stuff |
| 04:20:13 | <Yakov> | GitHub could technically eliminate the supply chain attack vector by enforcing immutable and permanently unique release tags, but doing so would inadvertently effect any repo which isn't a workflow dependency |
| 04:21:55 | | HackMii quits [Remote host closed the connection] |
| 04:22:30 | | HackMii (hacktheplanet) joins |
| 04:22:44 | <Yakov> | Or alternatively they can resolve the git hash of the referenced tag at the time of the workflow commit rather than at workflow execution |
| 04:23:05 | <nicolas17> | lock files, as mentioned here? https://nesbitt.io/2025/12/06/github-actions-package-manager.html |
| 04:23:07 | <Yakov> | Still won't prevent the mistakes of mishandling unsafe workflow triggers |
| 04:23:52 | <Yakov> | yeah i think lockfiles is exactly how i described it |
| 04:30:37 | <Yakov> | The reason they didn't do that is probably because that's adding infrastructure that's outside the git eco |
| 04:42:20 | <Yakov> | s/The reason/A reason |
| 04:42:28 | <Yakov> | Since they're not gonna track and author a lock file on your behalf |
| 04:49:06 | <Yakov> | Also version resolving within a GitHub workflow was made with a different functionality approach that wouldn't be compatible with the existing lockfile approach, for example you can target a major version (while omiting the minor version) and as long as new releases are created under the same major version your workflow will automatically use the |
| 04:49:06 | <Yakov> | latest one, and people using these dependencies (that omit the minor version) expect that behavior |
| 04:50:47 | <Yakov> | So yeah, even the blog author suggesting the lockfile as a fix isn't as straightforward as it seems |
| 04:54:27 | <Yakov> | Their best option is probably just enforcing immutable and permanent unique release tags and somehow specifically only enforcing that on workflow dependency repositories |
| 04:55:21 | <Yakov> | That will at least protect the people who specify the exact version tag . |
| 05:01:20 | <pabs> | huh, haven't seen this error from Google Search before: |
| 05:01:21 | <pabs> | Server Error |
| 05:01:21 | <pabs> | We're sorry but it appears that there has been an internal server error while processing your request. Our engineers have been notified and are working to resolve the issue. |
| 05:01:21 | <pabs> | Please try again later. |
| 05:01:37 | | pabs wonders if they are vibecoding a bit too much these days |
| 05:51:57 | | atphoenix__ (atphoenix) joins |
| 05:55:04 | | atphoenix_ quits [Ping timeout: 268 seconds] |
| 06:20:06 | <nicolas17> | pabs: I got an OutOfMemoryError with full Java backtrace from Google Groups once (maaany years ago) |
| 06:20:49 | | Webuser794882 joins |
| 06:33:21 | | Umbire quits [Ping timeout: 268 seconds] |
| 06:42:46 | | Umbire joins |
| 06:47:30 | | nine quits [Quit: See ya!] |
| 06:47:43 | | nine joins |
| 07:04:08 | | BearFortress quits [Ping timeout: 268 seconds] |
| 07:05:04 | | BearFortress joins |
| 07:07:50 | | Umbire quits [Ping timeout: 268 seconds] |
| 07:36:11 | | Umbire joins |
| 08:00:52 | | Umbire quits [Ping timeout: 268 seconds] |
| 08:07:38 | | myself quits [Read error: Connection reset by peer] |
| 08:07:48 | | myself joins |
| 08:55:42 | | APOLLO03a joins |
| 08:55:48 | | APOLLO03 quits [Ping timeout: 268 seconds] |
| 09:25:24 | | chrismrtn (chrismrtn) joins |
| 10:40:10 | | pseudorizer quits [Quit: ZNC 1.10.1 - https://znc.in] |
| 10:43:33 | | pseudorizer (pseudorizer) joins |
| 10:57:17 | | nine quits [Ping timeout: 268 seconds] |
| 10:59:00 | | nine joins |
| 11:02:43 | | Bleo1826007227196234552220110 joins |
| 11:02:53 | | nine quits [Client Quit] |
| 12:06:47 | | nine joins |
| 12:48:57 | | Umbire joins |
| 12:49:44 | | Umbire quits [Remote host closed the connection] |
| 12:50:07 | | Umbire joins |
| 12:59:11 | | Umbire is now known as RJHacker86616 |
| 12:59:11 | | RJHacker86616 quits [Killed (vindobona.hackint.org (Nickname regained by services))] |
| 12:59:14 | | Umbire (Umbire) joins |
| 12:59:52 | | Umbire quits [Remote host closed the connection] |
| 13:00:15 | | Umbire joins |
| 13:01:02 | | multisn8 (multisn8) joins |
| 14:58:51 | | VerifiedJ7 quits [Quit: The Lounge - https://thelounge.chat] |
| 14:59:43 | | VerifiedJ7 (VerifiedJ) joins |
| 15:07:28 | | SootBector quits [Remote host closed the connection] |
| 15:08:38 | | SootBector (SootBector) joins |
| 16:05:34 | | midou quits [Ping timeout: 268 seconds] |
| 16:07:20 | | midou joins |
| 16:17:56 | | nine quits [Quit: See ya!] |
| 16:18:08 | | nine joins |
| 17:45:45 | | Webuser794882 quits [Quit: Ooops, wrong browser tab.] |
| 17:48:33 | | Webuser280899 joins |
| 18:02:47 | | nine quits [Ping timeout: 268 seconds] |
| 18:04:28 | | nine joins |
| 18:09:31 | | nine quits [Ping timeout: 268 seconds] |
| 18:12:11 | | nine joins |
| 18:45:01 | | SootBector quits [Remote host closed the connection] |
| 18:45:34 | | Webuser280899 quits [Client Quit] |
| 18:46:11 | | SootBector (SootBector) joins |
| 18:47:05 | | pseudorizer quits [Quit: ZNC 1.10.2 - https://znc.in] |
| 18:49:07 | | pseudorizer (pseudorizer) joins |
| 18:49:39 | | Umbire quits [Ping timeout: 268 seconds] |
| 19:03:50 | | ^ quits [Ping timeout: 268 seconds] |
| 19:03:55 | | ^ (^) joins |
| 19:13:47 | | Umbire joins |
| 19:14:24 | | Umbire quits [Remote host closed the connection] |
| 19:14:46 | | Umbire joins |
| 19:53:32 | | gatagoto (gatagoto) joins |
| 20:12:04 | <eggdrop> | [remind] arkiver: Write Lua for manual Wget-AT jobs. |
| 20:19:06 | | ^ quits [Remote host closed the connection] |
| 20:19:18 | | ^ (^) joins |
| 20:34:14 | | SootBector quits [Remote host closed the connection] |
| 20:35:16 | | SootBector (SootBector) joins |
| 21:23:55 | <Doranwen> | I'I've apparently blundered with some of the code that is supposed to strip the LJ referers so I can get the links to other sites to be able to feed into the #// bot - because when I try it it doesn't remove a thing, yet regex101 says it matches and I've double- and triple-checked everything. I must be missing something, lol. |
| 21:24:45 | <Doranwen> | When I take a link like this: https://www.livejournal.com/away?to=http://photobucket.com/ and put it in, say a file I've called test3.txt (because I've been trying all manner of stuff, lol), this does nothing to the link: `sed 's~https://www\.livejournal\.com/away\?to=~~g' test3.txt > test4.txt` |
| 21:25:12 | <Doranwen> | I've obviously got something wrong but I can't figure out what. /o\ |
| 21:44:03 | <pabs> | use sed -E since the default is relatively non-featureful regexes |
| 21:46:58 | <pabs> | or for really really featureful regexes, use perl instead of sed: perl -pe 's{foo}{bar}' |
| 21:50:08 | <@JAA> | Neither is needed here though. BRE is fine for that. |
| 21:51:12 | <@JAA> | But BRE vs ERE is indeed the cause. |
| 21:51:54 | <@JAA> | Doranwen: Remove the backslash before the question mark. The question mark has no special meaning in Basic Regular Expressions (BRE), which is what `sed` without options uses. |
| 21:52:23 | <@JAA> | Alternatively, switch to Extended Regular Expressions (ERE), where the question mark does have special meaning and needs to be escaped as you did. |
| 21:52:42 | <@JAA> | That'd be `-E`. |
| 22:07:29 | <nicolas17> | https://www.youtube.com/watch?v=Kmww5t3QW7s crazy work |
| 22:08:04 | <Doranwen> | Ahhhhh, that explains it. |
| 22:08:09 | <Doranwen> | Thank you! |
| 22:08:22 | | HackMii quits [Ping timeout: 240 seconds] |
| 22:10:47 | | HackMii (hacktheplanet) joins |
| 22:23:45 | | SootBector quits [Remote host closed the connection] |
| 22:24:56 | | SootBector (SootBector) joins |
| 22:45:22 | | HackMii quits [Ping timeout: 240 seconds] |
| 22:47:34 | | Hackerpcs quits [Remote host closed the connection] |
| 22:47:34 | | HackMii (hacktheplanet) joins |
| 22:48:27 | | Hackerpcs (Hackerpcs) joins |
| 22:51:57 | | Meli quits [Ping timeout: 268 seconds] |
| 23:03:44 | | SootBector quits [Remote host closed the connection] |
| 23:04:45 | | HackMii quits [Remote host closed the connection] |
| 23:04:51 | | SootBector (SootBector) joins |
| 23:05:54 | | HackMii (hacktheplanet) joins |
| 23:25:24 | | Meli (Meli) joins |
| 23:38:14 | <Yakov> | https://tanstack.com/blog/npm-supply-chain-compromise-postmortem |
| 23:39:30 | <Yakov> | Crazy how we were just discussing github action supply chain attacks yesterday and another major one just happened |
| 23:40:08 | <Yakov> | > On 2026-05-11 between 19:20 and 19:26 UTC, an attacker published 84 malicious versions across 42 @tanstack/* npm packages by combining: the pull_request_target "Pwn Request" pattern, GitHub Actions cache poisoning across the fork↔base trust boundary, and runtime memory extraction of an OIDC token from the GitHub Actions runner process. |
| 23:43:28 | <Yakov> | poisoning cache is a pretty crazy method |