<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: innoying</title><link>https://news.ycombinator.com/user?id=innoying</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 21 May 2026 01:24:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=innoying" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by innoying in "GitHub confirms breach of 3,800 repos via malicious VSCode extension"]]></title><description><![CDATA[
<p>If you own a GitHub organization and are looking for what changes/controls you can apply to reduce the risk/impact of PAT token  exfiltration (and subsequent abuse) like what occurred here, I listed a few at the end of <a href="https://blog.bored.engineer/github-canarytokens-5c9e36ad7ecf?source=friends_link&sk=57cd6a6d5c191eaa267cfac5ba2d035c" rel="nofollow">https://blog.bored.engineer/github-canarytokens-5c9e36ad7ecf...</a><p>- Enable audit log streaming[1] on your enterprise including source IPs and API requests, even if it’s just going to an S3 bucket nobody looks at it, your incident response team will thank you later.<p>- Enforce the use of SSO on your GitHub organization[2], not just because SSO is good but because it forces an explicit authorization action[3] by users to grant an SSH key/PAT access to your organization resources, instead of granting access implicitly. That way the PAT created for someone’s weekend project won’t have access to your organization resources.<p>- Enforce an IP allowlist[4] for your organization from a set of known trusted VPN/corporate IPs. This is by-far the strongest control (and the most painful to rollout) as it will prevent stolen credentials (even if still valid) from being used by an attacker except on the intended systems where you (hopefully) have other visibility/alerting via EDR or related tooling.<p>- If you can, restrict access from personal access tokens[5] to your organization resources. Blocking classic PATs and enforcing a maximum expiration (ex: 3 months) on fine-grained PATs is a great way to reduce risk if you can’t eliminate PATs altogether[6].<p>- If you use GitHub enterprise (on-prem), configure collection of the raw HTTP access logs[7] in addition to native GitHub audit logs, it may prove critical during incident response.<p>[1]: <a href="https://docs.github.com/en/enterprise-cloud@latest/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise" rel="nofollow">https://docs.github.com/en/enterprise-cloud@latest/admin/mon...</a>
[2]: <a href="https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-single-sign-on/about-authentication-with-single-sign-on" rel="nofollow">https://docs.github.com/en/enterprise-cloud@latest/authentic...</a>
[3]: <a href="https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-single-sign-on/authorizing-an-ssh-key-for-use-with-single-sign-on" rel="nofollow">https://docs.github.com/en/enterprise-cloud@latest/authentic...</a>
[4]: <a href="https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization" rel="nofollow">https://docs.github.com/en/enterprise-cloud@latest/organizat...</a>
[5]: <a href="https://docs.github.com/en/enterprise-cloud@latest/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization#restricting-access-by-personal-access-tokens" rel="nofollow">https://docs.github.com/en/enterprise-cloud@latest/organizat...</a>
[6]: <a href="https://edu.chainguard.dev/open-source/octo-sts/overview/" rel="nofollow">https://edu.chainguard.dev/open-source/octo-sts/overview/</a>
[7]: <a href="https://docs.github.com/en/enterprise-server@3.16/admin/monitoring-and-managing-your-instance/monitoring-your-instance/about-system-logs#log-files-for-the-http-server" rel="nofollow">https://docs.github.com/en/enterprise-server@3.16/admin/moni...</a></p>
]]></description><pubDate>Wed, 20 May 2026 19:49:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48213134</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=48213134</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48213134</guid></item><item><title><![CDATA[Building GitHub Canarytokens: A rant about Audit Log gaps]]></title><description><![CDATA[
<p>Article URL: <a href="https://blog.bored.engineer/github-canarytokens-5c9e36ad7ecf?source=friends_link&sk=57cd6a6d5c191eaa267cfac5ba2d035c">https://blog.bored.engineer/github-canarytokens-5c9e36ad7ecf?source=friends_link&sk=57cd6a6d5c191eaa267cfac5ba2d035c</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48009226">https://news.ycombinator.com/item?id=48009226</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 04 May 2026 14:27:06 +0000</pubDate><link>https://blog.bored.engineer/github-canarytokens-5c9e36ad7ecf?source=friends_link&amp;sk=57cd6a6d5c191eaa267cfac5ba2d035c</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=48009226</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48009226</guid></item><item><title><![CDATA[New comment by innoying in "Every GitHub object has two IDs"]]></title><description><![CDATA[
<p>The newer global node IDs (which can be forced via the 'X-Github-Next-Global-ID' header [1]) have a prefix indicating the "type" of object delimited by an underscore, then a base64 encoded msgpack payload. For most objects it contains just a version (starting at 0) followed by the numeric "databaseId" field, but some are more complex.<p>For example, my GitHub user [2] has the node ID "U_kgDOAAhEkg". Users are "U_" and then the remaining data decodes to: [0, 541842] which matches the numeric ID for my user accepted by the REST API [3].<p>You shouldn't rely on any of this implementation of course, instead just directly query the "databaseId" field from the GraphQL API where you need interoperability. And in the other direction the REST API returns the "node_id" field for the GraphQL API.<p>For folks who finds this interesting, you might also like [4] which details GitHub's ETag implementation for the REST API.<p>[1] <a href="https://docs.github.com/en/graphql/guides/migrating-graphql-global-node-ids" rel="nofollow">https://docs.github.com/en/graphql/guides/migrating-graphql-...</a>
[2] <a href="https://api.github.com/user/541842" rel="nofollow">https://api.github.com/user/541842</a>
[3] <a href="https://gchq.github.io/CyberChef/#recipe=Find_/_Replace(%7B'option':'Regex','string':'%5E%5B%5E_%5D%2B_'%7D,'',true,false,true,false)From_Base64('A-Za-z0-9%2B/%3D',true,false)From_MessagePack()&input=VV9rZ0RPQUFoRWtn" rel="nofollow">https://gchq.github.io/CyberChef/#recipe=Find_/_Replace(%7B'...</a>
[4] <a href="https://github.com/bored-engineer/github-conditional-http-transport" rel="nofollow">https://github.com/bored-engineer/github-conditional-http-tr...</a></p>
]]></description><pubDate>Wed, 14 Jan 2026 02:56:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46611723</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=46611723</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46611723</guid></item><item><title><![CDATA[Building a WebAuthn Click Farm: Bypassing Cloudflare's Attestation of Personhood]]></title><description><![CDATA[
<p>Article URL: <a href="https://betterappsec.com/building-a-webauthn-click-farm-are-captchas-obsolete-bfab07bb798c?source=friends_link&sk=f7a2c54a4b70dc71a861e04d0793cb6b">https://betterappsec.com/building-a-webauthn-click-farm-are-captchas-obsolete-bfab07bb798c?source=friends_link&sk=f7a2c54a4b70dc71a861e04d0793cb6b</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=27462699">https://news.ycombinator.com/item?id=27462699</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 10 Jun 2021 16:43:05 +0000</pubDate><link>https://betterappsec.com/building-a-webauthn-click-farm-are-captchas-obsolete-bfab07bb798c?source=friends_link&amp;sk=f7a2c54a4b70dc71a861e04d0793cb6b</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=27462699</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27462699</guid></item><item><title><![CDATA[New comment by innoying in "Code scanning for security vulnerabilities now available"]]></title><description><![CDATA[
<p>CodeQL is based on an existing product from a company called Semmle which GitHub acquired in late 2019 [1]<p>They have been part of GitHub for barely a year so it's not too surprising, especially given they are continuing to support the product for the enterprise customers they had previously not just GitHub.<p>[1] <a href="https://techcrunch.com/2019/09/18/github-acquires-code-analysis-tool-semmle/" rel="nofollow">https://techcrunch.com/2019/09/18/github-acquires-code-analy...</a></p>
]]></description><pubDate>Thu, 01 Oct 2020 06:07:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=24647856</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=24647856</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24647856</guid></item><item><title><![CDATA[New comment by innoying in "Bitsquatting: DNS Hijacking without exploitation"]]></title><description><![CDATA[
<p>If anyone is interested in even more data than Artem released, I did a similar experiment based off Artem's work except with a couple hundred domains and with TLS certificates for every one a few years ago: <a href="https://bitfl1p.com/" rel="nofollow">https://bitfl1p.com/</a></p>
]]></description><pubDate>Thu, 22 Nov 2018 18:09:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=18511474</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=18511474</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18511474</guid></item><item><title><![CDATA[New comment by innoying in "Reading Uber’s Internal Emails: Bug Bounty report worth $10K"]]></title><description><![CDATA[
<p>Why does this comment appear on every bug bounty HN thread? Straight from the horse's mouth [0]:<p><pre><code>  The black market is very unlikely to be a place you could sell a bug in a specific 
  website or service. It is not “worth millions”. Please stop repeating this.
</code></pre>
[0] - <a href="https://medium.com/@collingreene/to-the-bounty-hunters-9259b1544325" rel="nofollow">https://medium.com/@collingreene/to-the-bounty-hunters-9259b...</a></p>
]]></description><pubDate>Sat, 21 Jan 2017 20:56:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=13452107</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=13452107</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13452107</guid></item><item><title><![CDATA[New comment by innoying in "Reading Uber’s Internal Emails: Bug Bounty report worth $10K"]]></title><description><![CDATA[
<p>Technically they did employ some DNS validation. You had to setup a MX record to point to SendGrid before you could add the domain to your account. The problem was in order to send emails from a domain you had to add the same MX record. If you never setup the receiving end as well (on SendGrid) you were vulnerable to a takeover from another SendGrid account.</p>
]]></description><pubDate>Sat, 21 Jan 2017 20:43:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=13452031</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=13452031</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13452031</guid></item><item><title><![CDATA[New comment by innoying in "Reading Uber’s Internal Emails: Bug Bounty report worth $10K"]]></title><description><![CDATA[
<p>I do not believe the author circulated this report to multiple companies, however once it was made public a number of other reporters in the community did and continued to iterate on it until SendGrid fixed the issues.<p>Source: I am a member of said community: <a href="https://bugcrowd.com/bored-engineer" rel="nofollow">https://bugcrowd.com/bored-engineer</a>, <a href="https://hackerone.com/bored-engineer" rel="nofollow">https://hackerone.com/bored-engineer</a>, etc</p>
]]></description><pubDate>Sat, 21 Jan 2017 20:34:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=13451971</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=13451971</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13451971</guid></item><item><title><![CDATA[New comment by innoying in "Reading Uber’s Internal Emails: Bug Bounty report worth $10K"]]></title><description><![CDATA[
<p>I believe they did retroactively search for accounts.<p>Source: I had a number of accounts banned when testing different iterations of this bug.</p>
]]></description><pubDate>Sat, 21 Jan 2017 20:32:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=13451959</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=13451959</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13451959</guid></item><item><title><![CDATA[New comment by innoying in "Issue: Bitbucket relies on the Referer HTTP header"]]></title><description><![CDATA[
<p>But that's not what happened here at all. Bitbucket has responded explaining why this (self-inflicted) bug exists (a security decision in an underlying framework) and deferred to the framework maintainers for further discussion because they have the best context on why that decision was initially made and under what scenarios it might be changed.</p>
]]></description><pubDate>Mon, 02 Jan 2017 17:22:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=13302590</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=13302590</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13302590</guid></item><item><title><![CDATA[New comment by innoying in "Issue: Bitbucket relies on the Referer HTTP header"]]></title><description><![CDATA[
<p>I think you're misunderstanding the attack scenario here:<p>> Anyway, if the browser is connecting via port 80, the MITM can just use a transparent http->https proxy to rewrite the referrer, and forward the request to the https server, so you've already lost.<p>That wouldn't actually work since the user's active session cookie has the "Secure" flag set (i.e. isn't sent over HTTP). Sure if the user logged-in again on the HTTP page you could exploit this with a transparent proxy but there's very little outside of implementing HPKP that BitBucket could do to prevent that attack.</p>
]]></description><pubDate>Mon, 02 Jan 2017 17:17:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=13302541</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=13302541</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13302541</guid></item><item><title><![CDATA[New comment by innoying in "Shopify has paid over $300k in security exploit bounties"]]></title><description><![CDATA[
<p>Hi "FBSecuritySux",<p>I'm not a member of the Facebook security team, but I work in the industry and your comment frustrates me. I can understand criticizing companies for poor security decisions if they are legitimately bad decisions, but I don't think that's the case here...<p>I just tested this between two Facebook accounts, and got a URL like this: <a href="https://scontent.fsnc1-1.fna.fbcdn.net/v/t35.0-12/12628848_10210262841021024_251749007_o.jpg?oh=6ae8902a3a7ae3a78397cd7fa0864b45&oe=5857E4D3" rel="nofollow">https://scontent.fsnc1-1.fna.fbcdn.net/v/t35.0-12/12628848_1...</a><p>Let's imagine, for the sake of argument, that all those numbers in the URL are predictable and 100% the security relies on the "oh" and "oe" parameters. Taking a rather naive approach both of these appear to be exclusively hex strings. Therefor "oh" is 16 bytes and "oe" is 4 bytes making the total 8*(16+4) = 160 bits<p>In other words, assuming both parameters are truly random, an attacker would have to try (worst-case) this many combinations to view a victim's image:
2,135,987,035,920,910,082,395,021,706,169,552,114,602,704,522,356,652,769,947,041,607,822,219,725,780,640,550,022,962,086,936,576</p>
]]></description><pubDate>Sun, 18 Dec 2016 05:08:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=13204443</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=13204443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13204443</guid></item><item><title><![CDATA[Attacking Network Infrastructure to Generate a 4 Tb/s DDoS]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=Fi-nI-Faj4I">https://www.youtube.com/watch?v=Fi-nI-Faj4I</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=12951662">https://news.ycombinator.com/item?id=12951662</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 14 Nov 2016 17:48:09 +0000</pubDate><link>https://www.youtube.com/watch?v=Fi-nI-Faj4I</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=12951662</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12951662</guid></item><item><title><![CDATA[New comment by innoying in "Yelp invites hackers to expose vulnerabilities through bug bounty program"]]></title><description><![CDATA[
<p>It's been private (invite-only) for about 2 years, they went public today.</p>
]]></description><pubDate>Tue, 06 Sep 2016 17:34:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=12437703</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=12437703</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12437703</guid></item><item><title><![CDATA[New comment by innoying in "Google's login page accepts a vulnerable GET parameter"]]></title><description><![CDATA[
<p>It's not an "easy fix", there could be (and probably are) thousands of different endpoints that can be redirected to after login, whitelisting all of those just doesn't make sense.</p>
]]></description><pubDate>Wed, 31 Aug 2016 01:39:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=12395334</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=12395334</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12395334</guid></item><item><title><![CDATA[New comment by innoying in "Google's login page accepts a vulnerable GET parameter"]]></title><description><![CDATA[
<p>I totally agree. I don't even see how the impact is even more than the open-redirects which already exist. You could do this exact same exploit against tons of providers (Facebook, Twitter, etc) via the standard OAuth flow and the 'redirect_url' parameter.</p>
]]></description><pubDate>Wed, 31 Aug 2016 01:38:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=12395329</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=12395329</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12395329</guid></item><item><title><![CDATA[New comment by innoying in "GitHub's “hub” tool rewritten in Golang"]]></title><description><![CDATA[
<p>Or like any compiled language they can just grab a binary: <a href="https://github.com/github/hub/releases" rel="nofollow">https://github.com/github/hub/releases</a></p>
]]></description><pubDate>Fri, 02 Jan 2015 20:42:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=8828422</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=8828422</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8828422</guid></item><item><title><![CDATA[LinkedIn Begins Ranking Universities Based on Career Outcomes]]></title><description><![CDATA[
<p>Article URL: <a href="http://blog.linkedin.com/2014/10/01/ranking-universities-based-on-career-outcomes/?">http://blog.linkedin.com/2014/10/01/ranking-universities-based-on-career-outcomes/?</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=8402290">https://news.ycombinator.com/item?id=8402290</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 02 Oct 2014 18:36:25 +0000</pubDate><link>http://blog.linkedin.com/2014/10/01/ranking-universities-based-on-career-outcomes/?</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=8402290</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8402290</guid></item><item><title><![CDATA[LinkedIn – Permanent launch of IPv6]]></title><description><![CDATA[
<p>Article URL: <a href="http://engineering.linkedin.com/ipv6/permanent-launch-ipv6?">http://engineering.linkedin.com/ipv6/permanent-launch-ipv6?</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=8287235">https://news.ycombinator.com/item?id=8287235</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 08 Sep 2014 21:01:45 +0000</pubDate><link>http://engineering.linkedin.com/ipv6/permanent-launch-ipv6?</link><dc:creator>innoying</dc:creator><comments>https://news.ycombinator.com/item?id=8287235</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8287235</guid></item></channel></rss>