People often ask me "How did you learn how to hack?" The answer: by reading. This page is a collection of the blog posts and other articles that I have accumulated over the years of my journey. Enjoy!
localhost for development purposes. When enabled in production, this can lead to an application running on the device to steal OAuth codes via redirects to itself. The same issue could appear with CORS.DataSet and DataTable in some functions. Because DataSet is a well-known gadget in ysoserial, Microsoft has a filtering mechanism. It will strip out all other serialization information except for XmlSchema and XmlDiffGram.Referrer is set to a specific value, then it bypasses authentication. Next, they need to trigger the vulnerability prior to the page verificatoin from occuring on the Load() event. Byb combining the usage of ToolPane and SPWebPartManager, an attacker can force SharePoint to trigger the vulnerable code prior to the full ASP.NET lifecycle taking place. All of this was just reverse-engineering the application and seeing which paths could be hit.MsgBatchUpdateOrders, this check is not performed on three order types. This allows for complete circumvention of the security protection and gives attackers the ability to impersonate users on their operations.Currencies library transfer() function was added. This provided a generic solution for all aToken transfers. If the remaining balance after the transfer is less then ED, the Runtime would perform an AAVE withdraw all for the recipient. This would ensure that no dust remained in the origin account. All seems good in the world!atoken_balance.saturating_sub(amount);. This uses saturating math to counter cases where things underflow. In the context of this one function, it makes perfect sense. However, this change was made at a much more general level, causing unintended side-effects on the rest of the system.Stableswap::add_liquidity_share() mints liquidity shares for the usre in exchange for a user-provided asset. A user could call this function with an aToken amount greater than their actual account balance. Because the transfer logic no longer fails when the user has insufficient funds, this succeeds. This allowed for an infinite mint of shares on the protocol, effectively a game-over bug.checked_* in Rust instead of saturated_* functions. Second, improve testing across the board to find more of these edge cases.cancel_work_sync() can be used to stop currently running tasks in the Linux kernel, but it can be rescheduled through a separate path. Unlike tasklets, workqueue-based execution doesn't provide a reliable way to control an object's lifetime using cancellation alone. So, disable_work_sync was added to address this. However, none of this sat well with the author of this post. This subtle design led to multiple race condition vulnerabilities in the synchronous worker cancellation process._cancel APIs are treated as a synchronization barrier for the object's lifetime. While it can stop/clean up what is running right now, it does not guarantee it will ever run again. So, they named this bug class Out of Cancel issues and seem to expect to find more of these in the Linux kernel in the future.espintcp_close the code calls cancel+work_sync() when it should call disable_work_sync(). This makes the work schedulable again, even though the function contains cleanup code. This leads to a classic use-after-free scenario. The rest of the post is all about hitting the race condition reliability and requires a deep understanding of the Linux kernel to grasp.disable_delayed_work_sync instead of cancel_delayed_work_sync. The article is interesting, even without all of the technical concepts on binary exploitation. They found a bad design pattern and found multiple abuses of it. That's great research!spotbugs, leaking further secrets from spotbugs and reviewdog. From ReviewDog, they compromised TJ's actions to target real users. In this post, they dive deeper into GitHub Actions best practices..git file is deleted, it's possible to get the main part of the repo to get looked at for git commands. Using this, it's possible to execute arbitrary bash commands in files like config. As a result, when a user deletes a directory, Looker will validate the deletion request. In particular, it checks if the directory is .git. /! So, it's possible to delete the entire directory, including the git repo. At first glance, this means that the attack above wouldn't work; there's no content in the directory at all. This is where the internals of git and the Ruby file manager come into play...OR instead of an AND. So, if either SPF and DKIM succeed, then DMARC succeeds.anything.company.com will pass under the domain company.com. So, all it takes is a single subdomain compromise.include:salesforce.com is bad. An attacker could simply use their own Salesforce account, and it would now be valid.