Cantina Security, with Yeta Labs, has released apex-flash-1, an open-weights model trained specifically for vulnerability research. It is a reinforcement learning fine-tune of Z.ai’s GLM-5.3-Flash, released on Hugging Face under the MIT license.
Is it deployable? Yes, the MIT weights serve on vLLM, SGLang or Transformers, but BF16 needs roughly 640 GB of GPU memory.
What Cantina Built
apex-flash-1 has 321.3B total parameters, per its Hugging Face safetensors metadata. The GLM-5.3-Flash base is a Mixture-of-Experts model with 18B active parameters.
Cantina trained it with GRPO using a rank-256 LoRA plus selective full-parameter training. The data covers 150 tasks built from 50 real vulnerability cases.
Each case appears in 3 variants: guided whitebox, focused whitebox and focused blackbox.
Authorization, identity and scope flaws make up 72% of cases. Accounting and numerical precision bugs add 18%. Time validation, business rules and SSRF cover the rest.
As per the model card on HF, RL rollouts ran inside the Codex agent harness on production-like software and protocol environments.
Benchmark Results
Cantina evaluated 60 tasks from 20 held-out vulnerability cases. Each model ran the set once, with costs estimated from provider pricing.
- apex-flash-1: 40/60 solved (66.7% pass@1), about $2.38
- GLM-5.3-Flash (base): 36/60 solved (60.0%), about $4.56
- Claude Opus 5 High: 43/60 solved (71.7%), about $74.68
Opus solved 3 more tasks but cost about 31x more per run. That is roughly $0.06 per solved task for apex-flash-1 versus $1.74 for Opus. These are company-reported numbers on an internal benchmark.
A Worker Model, Not an Orchestrator
Cantina positions apex-flash-1 as a worker orchestrated by a larger model. The card lists code reading, tool use, exploit development and verification as target skills.
An experimental apex-flash-1-abliterated variant ships with modified refusal behavior. It was not separately evaluated.
Cantina’s rationale is that defenders need capable models they can run and control locally.
Interactive Explainer
/* 2 vuln mix */
var V=[[‘Authorization, identity and scope’,72],[‘Accounting and numerical precision’,18],[‘Time validation’,4],[‘Business rules’,4],[‘SSRF’,2]],sel=0;
V.forEach(function(v,i){var b=document.createElement(‘div’);b.className=”bar”;b.innerHTML=’
‘+v[0]+’‘+v[1]+’% · ‘+(v[1]/2)+’ cases
‘;b.onclick=function(){sel=i;paint()};$(‘vb’).appendChild(b)});
for(var k=0;k<50;k++){var d=document.createElement(‘div’);d.className=”dot”;$(‘vd’).appendChild(d)}
function paint(){var bars=[].slice.call($(‘vb’).children);bars.forEach(function(b,i){b.classList.toggle(‘on’,i===sel)});
var start=0;for(var i=0;i
function animBars(){var f=[].slice.call($(‘vb’).querySelectorAll(‘.fill’));f.forEach(function(x){x.style.width=”0″});setTimeout(function(){f.forEach(function(x,i){x.style.width=V[i][1]+’%’})},40)}
paint();animBars();
/* 3 variants */
var VV=[[‘Guided whitebox’,’Full source’,’Explicit guidance’,33,’full’,’full’],[‘Focused whitebox’,’Full source’,’Limited direction’,66,’full’,’part’],[‘Focused blackbox’,’No source’,’Limited direction’,100,’off’,’part’]];
VV.forEach(function(v,i){var b=document.createElement(‘button’);b.className=”btn ghost”;b.textContent=v[0];b.onclick=function(){setV(i)};$(‘vbt’).appendChild(b)});
function setV(i){var v=VV[i];[].slice.call($(‘vbt’).children).forEach(function(b,j){b.classList.toggle(‘sel’,j===i)});
$(‘cSrc’).className=”card “+v[4];$(‘cGd’).className=”card “+v[5];$(‘sSrc’).textContent=v[1];$(‘sGd’).textContent=v[2];
$(‘dlab’).textContent=[‘Easier’,’Harder’,’Hardest’][i];$(‘dfill’).style.width=v[3]+’%’;}
setV(0);
/* 4 bench */
var M=[[‘Apex Flash-1′,’apex’,40,2.38],[‘GLM-5.3-Flash (base)’,’glm’,36,4.56],[‘Claude Opus 5 High’,’opus’,43,74.68]],metric=0;
var ML=[‘Pass@1′,’Run cost’,’Cost per solve’];
ML.forEach(function(l,i){var b=document.createElement(‘button’);b.className=”btn ghost”;b.textContent=l;b.onclick=function(){metric=i;renderBench()};$(‘mbt’).appendChild(b)});
M.forEach(function(m){var r=document.createElement(‘div’);r.className=”row “+m[1];r.innerHTML=’
‘+m[0]+’
‘;$(‘chart’).appendChild(r)});
function val(m){return metric===0?m[2]/60*100:metric===1?m[3]:m[3]/m[2]}
function fmt(m){var v=val(m);return metric===0?v.toFixed(1)+’% (‘+m[2]+’/60)’:’$’+v.toFixed(2)}
function renderBench(){[].slice.call($(‘mbt’).children).forEach(function(b,j){b.classList.toggle(‘sel’,j===metric)});
var mx=Math.max.apply(null,M.map(val));var rows=[].slice.call($(‘chart’).children);
rows.forEach(function(r,i){var f=r.querySelector(‘.fill’);r.querySelector(‘.val’).textContent=fmt(M[i]);f.style.width=”0″;(function(f,w){setTimeout(function(){f.style.width=Math.max(w,1.5)+’%’},40)})(f,val(M[i])/mx*100)});}
$(‘s1’).textContent=”3″;$(‘s2′).textContent=(74.68/2.38).toFixed(1)+’x’;$(‘s3’).textContent=”+6.7 pts”;
function proj(){var n=+$(‘rng’).value;$(‘runs’).textContent=n.toLocaleString();
$(‘proj’).innerHTML=’Apex Flash-1 $’+(2.38/60*n).toLocaleString(undefined,{maximumFractionDigits:0})+’ vs Claude Opus 5 High $’+(74.68/60*n).toLocaleString(undefined,{maximumFractionDigits:0})+’‘;}
$(‘rng’).oninput=proj;proj();renderBench();
/* 5 orchestration */
var W=[‘Code reading’,’Tool use’,’Exploit dev’,’Verification’];
W.forEach(function(w){var e=document.createElement(‘div’);e.className=”wk”;e.innerHTML=’
apex-flash-1
‘+w+’
idle
‘;$(‘wks’).appendChild(e)});
var timers=[];
function reset(){timers.forEach(clearTimeout);timers=[];[].slice.call($(‘wks’).children).forEach(function(w){w.className=”wk”;w.querySelector(‘.st’).textContent=”idle”});[].slice.call(document.querySelectorAll(‘.pkt’)).forEach(function(p){p.remove()});$(‘boss’).querySelector(‘.v’).textContent=”Larger frontier model”}
function dispatch(){reset();var o=$(‘orch’).getBoundingClientRect(),b=$(‘boss’).getBoundingClientRect();
$(‘boss’).querySelector(‘.v’).textContent=”Planning audit…”;
[].slice.call($(‘wks’).children).forEach(function(w,i){
timers.push(setTimeout(function(){var r=w.getBoundingClientRect(),p=document.createElement(‘div’);p.className=”pkt”;$(‘orch’).appendChild(p);
var x0=b.left-o.left+b.width/2-6,y0=b.bottom-o.top,x1=r.left-o.left+r.width/2-6,y1=r.top-o.top-6;
p.style.left=x0+’px’;p.style.top=y0+’px’;p.style.opacity=’1′;
if(p.animate){p.animate([{left:x0+’px’,top:y0+’px’},{left:x1+’px’,top:y1+’px’}],{duration:650,easing:’ease-in’,fill:’forwards’})}else{p.style.left=x1+’px’;p.style.top=y1+’px’}
timers.push(setTimeout(function(){p.remove();w.className=”wk busy”;w.querySelector(‘.st’).textContent=”working”},650));
timers.push(setTimeout(function(){w.className=”wk done”;w.querySelector(‘.st’).textContent=”result returned”;
if(i===3)$(‘boss’).querySelector(‘.v’).textContent=”Findings merged”;},1500+i*450));
},300+i*250));});}
$(‘go’).onclick=dispatch;$(‘rs’).onclick=reset;
/* 6 deploy */
var P=[[‘BF16 (official)’,2],[‘FP8’,1],[‘4-bit’,0.5]],G=[[‘H100 80 GB’,80],[‘H200 141 GB’,141],[‘DGX Spark 128 GB’,128]],pi=0,gi=1;
P.forEach(function(p,i){var b=document.createElement(‘button’);b.className=”btn ghost”;b.textContent=p[0];b.onclick=function(){pi=i;dep()};$(‘pr’).appendChild(b)});
G.forEach(function(g,i){var b=document.createElement(‘button’);b.className=”btn ghost”;b.textContent=g[0];b.onclick=function(){gi=i;dep()};$(‘gp’).appendChild(b)});
function dep(){[].slice.call($(‘pr’).children).forEach(function(b,j){b.classList.toggle(‘sel’,j===pi)});[].slice.call($(‘gp’).children).forEach(function(b,j){b.classList.toggle(‘sel’,j===gi)});
var w=321.3*P[pi][1],need=Math.ceil(w*1.15/G[gi][1]);$(‘wgb’).textContent=Math.round(w);$(‘ngpu’).textContent=need;
var h=””;for(var i=0;i


