But CES always manages to sneak in a few surprises, whether with what has been announced, what hasn't made an appearance, and trends that no one saw coming. We've rounded up the biggest CES 2026 curveballs so far.
The OWASP Foundation has released the eighth edition of its influential "Top 10 Security Risks" list for 2025,
introducing significant changes that reflect the evolving landscape of application security. Based on analysis
of more than 175,000 Common Vulnerabilities and Exposures (CVEs) records and feedback from security practitioners across the globe, this update addresses
modern attack vectors. Here's everything you need to know about what's changed, why these changes matter,
and how to protect your systems.
💡 Join GitLab Transcend on February 10 to learn how agentic AI transforms software delivery. Hear from customers and discover how to jumpstart your own modernization journey. Register now.
What's new in 2025?
The shift from 2021 (the last time the list came out) to 2025 represents more than minor adjustments, it's a fundamental shift in application security.
Two entirely new categories entered the list and one category was consolidated into another, which highlights emerging risks
that traditional testing often misses.
These additions and shifts can be seen in the chart below:
Two new categories
A03: Software Supply Chain Failures: Expands the 2021 category "Vulnerable and Outdated Components" to encompass the entire software supply chain, including dependencies, build systems, and distribution infrastructure. Despite having the fewest occurrences in testing data, this category has the highest average exploit and impact scores from CVEs.
A10: Mishandling of Exceptional Conditions: Focuses on improper error handling, logical errors, and failing open scenarios. This addresses how systems respond to abnormal conditions.
Major ranking changes
Security Misconfiguration surged from #5 (2021) to #2 (2025), now affecting 3% of tested applications.
Server-Side Request Forgery (SSRF) has been consolidated into A01: Broken Access Control.
Cryptographic Failures dropped from #2 to #4.
Injection fell from #3 to #5.
Insecure Design moved from #4 to #6.
Why these changes were made
The OWASP methodology combines data-driven analysis with community insights. The 2025 edition analyzed 589
Common Weakness Enumerations (CWEs), which is a substantial increase from the approximately 400 CWEs in 2021.
This expansion reflects the growing complexity of modern software systems and the need to capture emerging threats.
The community survey component addresses a fundamental limitation: testing data essentially looks into the past.
By the time security researchers develop testing methodologies and integrate them into automated tools, years may
have passed. The two community-voted categories ensure that emerging risks identified by frontline practitioners
are included, even if they're not yet prevalent in automated testing data.
The rise of Security Misconfiguration highlights an industry trend toward configuration-based security,
while Software Supply Chain Failures acknowledges the rise of sophisticated attacks targeting compromised packages.
Using GitLab Ultimate for vulnerability detection and management
GitLab Ultimate provides comprehensive security scanning to detect risks across the
2025 OWASP Top 10 categories. For instance, the end-to-end platform analyzes your project's source code, dependencies, and infrastructure
definitions. It also uses Advanced Static Application Security Testing (SAST) to detect injection flaws,
cryptographic failures, and insecure design patterns in source code. Infrastructure as Code (IaC) scanning finds
security misconfigurations in your deployment definitions. Secret Detection prevents the leakage of credentials, and
Dependency Scanning uncovers libraries with known vulnerabilities in your software supply chain, which directly
addresses the new A03 category for Software Supply Chain Failures.
In addition:
Dynamic Application Security Testing (DAST) probes your deployed application for broken access control,
authentication failures, and injection vulnerabilities by simulating attack vectors.
API Security Testing
probes your API endpoints for input validation weaknesses and authentication bypasses.
Web API Fuzz Testing
uncovers how your application handles exceptional conditions by generating unexpected inputs, which directly
addresses the new A10 category for mishandling of exceptional conditions.
Security scanning integrates seamlessly into your CI/CD pipeline, running when code is pushed from a feature
branch so developers can remediate vulnerabilities before they reach production. Security findings are consolidated in
the Vulnerability Report, where security
teams can triage, analyze, and track remediation. GitLab also allows you to leverage AI agents such as Security Analyst Agent, available in GitLab Duo Agent Platform, to quickly determine what are the most critical vulnerabilities and how to take action on
them.
You can enforce additional controls through merge request approval policies and pipeline execution policies to ensure security scanning runs consistently across your organization. Customer Success and Professional Services teams at GitLab ensure you derive value from an investment in GitLab in a timely manner.
Breakdowns or compromises in building, distributing, or updating software through vulnerabilities or malicious changes in dependencies, tools, or build processes.
Impact on your system:
Compromised packages introducing backdoors
Malicious code injected during build processes
Vulnerable dependencies cascading through your application
Use of components from untrusted sources in production
Weaknesses in design representing different failures, expressed as missing or ineffective control design—architectural flaws rather than implementation bugs.
Programs failing to prevent, detect, and respond to unusual and unpredictable situations, which leads to crashes, unexpected behavior, or vulnerabilities.
Impact on your system
Information disclosure through verbose error messages
GitLab provides tools to enable you to not only quickly find and remediate vulnerabilities within the OWASP Top 10,
but also to prevent them from making it into your production system. By following these best practices you can enhance
and maintain your security posture:
Automated security scanning for all repositories
Perform SAST Scanning to detect insecure design patterns like plaintext password storage, inadequate error handling, and missing encryption during code review, catching design flaws early in the development lifecycle.
Perform Secret Detection to identify credentials in configuration files, environment variables, and code, preventing plaintext password storage and ensuring secrets are properly managed through GitLab's CI/CD variables with masking and encryption.
Perform DAST Scanning to detect broken access control vulnerabilities
Perform Dependency Scanning to scan project dependencies against vulnerability databases, identifying known CVEs in direct and transitive dependencies across multiple package managers (npm, pip, Maven, etc.).
Perform Container Scanning to analyze Docker images for vulnerable base layers and packages, ensuring container supply chain security before deployment.
Perform IaC Scanning to check your infrastructure definition files for known vulnerabilities.
Leverage API Security Tools to secure and protect web APIs from unauthorized access, misuse, and attacks.
Perform Web API Fuzz Testing to discover bugs and potential vulnerabilities that other QA processes might miss.
View vulnerabilities detected in MR with diff from feature branch to main branch.
Use Security Iventory to visualize which assets you need to secure and understand the actions you need to take to improve security.
Leverage Compliance Center to manage compliance standards adherence reporting, violations reporting, and compliance frameworks.
Use Security Inventory to viewing enabled security scanners and vulnerabilities.
Set up prevention and maintain documentation
Configure Security Policies to block merges or deployments when high-severity vulnerabilities are detected in dependencies, enforcing security standards automatically.
Use Compliance Frameworks to enforce organizational security standards through automated policy checks that verify encryption requirements, credential management practices, and secure workflow implementations are followed.
Use GitLab Wiki and repository documentation to maintain security design principles, approved patterns, and architectural decision records that guide developers toward secure-by-design implementations.
Implement merge request approval rules requiring security architect review for features involving authentication, authorization, encryption, or sensitive data handling, ensuring design-level security validation.
Create tests to verify input validation and allowlist approaches for file paths
Use GitLab Issues and Epics to document security requirements and threat models during the design phase, creating a traceable record of security decisions and ensuring security considerations are addressed before implementation begins.
View and set Security Policies scoped to instance, group, or project.
Leverage AI
Use Code Suggestions for proactive guidance during development, suggesting secure design patterns like proper password hashing (bcrypt, Argon2), encrypted storage mechanisms, and appropriate error handling that doesn't leak sensitive information.
Use Security Analyst Agent to review detected insecure design vulnerabilities in context, explaining the architectural implications, assessing risk based on your application's threat model, and providing remediation strategies that address root design flaws rather than just symptoms.
Leverage Security Analyst Agent to quickly triage and assess security vulnerabilities.
Key takeaways for development teams
Supply chain security is critical: With A03's addition and high-impact scores, securing your software supply chain is no longer optional. Implement SBOM tracking, dependency scanning, and integrity verification throughout your pipeline.
Configuration matters more than ever: The rise to #2 shows that configuration-based security is now a primary attack vector. Automate configuration verification and implement IaC with security baked in.
Traditional threats persist: While Injection and Cryptographic Failures dropped in ranking, they remain critical. Don't deprioritize them just because they've fallen on the list.
Error handling is security: The new A10 category emphasizes that how your application handles failures is a security concern. Implement secure error handling from the start.
Testing must evolve: The expanded CWE coverage (589 vs. 400 in 2021) means testing strategies must be comprehensive. Combine SAST, DAST, source code analysis, and manual penetration testing for effective coverage.
Now, I know what you’re thinking. Yet another CSS pseudo-class… But I think this suggestion is rather cool.
Earlier this year, it was proposed to add a new pseudo-class, :drag, that would enable developers to apply styles when an element is being actively dragged by the user. Currently, CSS lacks a mechanism to detect drag interactions, making it difficult to manage UI behaviors that depend on this action without relying on JavaScript.
No JavaScript! I like the idea of having a pseudo-class dedicated to this function rather than going through the classList.toggle() route.
drag (fires every few milliseconds when the element is dragged),
dragstart (event fires at the initial drag), and
dragend (event fires when the dragging the element stops).
Let’s take a quick look at how these drag-and-drop events work in JavaScript in order to understand how they would translate in CSS. Imagine we have seven button elements in a <div> :
We can make the entire .menu-bar draggable by slapping an attribute on it:
<menu class="menu-bar" draggable="true">
<!-- etc. -->
</div>
For our CSS, we simply give the is-dragging class some styling, which will be applied only when the element is dragged or moved:
In CSS, we can set up an .is-dragging class that we’ll set on the element with JavaScript when it’s in the process of being dragged. These are the styles we apply to the element when that’s happening:
And here’s the JavaScript to toggle between the start of the mouse drag and its end. It listens for a dragstar event and adds the .is-dragging class to the .menu-bar. And when we drop the .menu-bar, the dragging fun stops and the .is-dragging class is removed:
Our output would look something like this. Drag the dropdown element to see:
Not bad! When the menu bar is dragged, it retains an image of itself in its original position that is styled with the .is-dragging class. And while we were totally able to knock this out with JavaScript, how cool would it be to have that proposed :drag pseudo-class to abstract all that script-y stuff:
+1 for performance! +1 for one less dependency! +1 for maintainability!
How about the preview image?
Did you know we can style the actual element itself as it’s being dragged around the screen? That’s called the preview image and we can replace it with a <div> that we can add custom styling to.
The browser displays a “preview” of the element as it is dragged.
Here’s where I’ll go out on a limb and suggest another CSS pseudo specifically for that ::drag-image. Imagine being able to sidestep all that JavaScript and straight-up write the styles in CSS:
I suppose it could be a pseudo-class instead, but it feels like a pseudo-element makes more sense since we’re talking about a specific object rather than a state.
I opened an issue for that — give it a thumbs-up if you’d find it handy to have a ::drag-image pseudo-element like that. The CSSWG is already slated to discuss the :drag proposal. If that gets baked into the specifications, then I’d push for the pseudo-element, too.
Thoughts?
Yea or nay for drag-related pseudos? Would you reach for something like that, or do you feel steps on JavaScript’s toes too much?
At the upcoming Visual Studio Live! Las Vegas developer conference, SQL expert Denny Cherry will share essential indexing strategies to boost performance in SQL Server databases--from 2000 to 2025. Here, Denny explains more about his session in which .NET devs can learn best practices, common mistakes, and how to optimize apps with smarter indexing.