[{"data":1,"prerenderedAt":584},["ShallowReactive",2],{"announcement":3,"i-tabler:sun":11,"i-tabler:moon":16,"i-tabler:menu-2":18,"i-tabler:x":20,"i-simple-icons:youtube":22,"i-simple-icons:github":24,"i-simple-icons:x":26,"i-simple-icons:linkedin":28,"i-tabler:arrow-up-right":31,"post-how-i-found-idors-that-shouldnt-exist":33,"post-nav-how-i-found-idors-that-shouldnt-exist":562,"video-how-i-found-idors-that-shouldnt-exist":574,"i-tabler:copy":582},{"startsAt":4,"endsAt":5,"scramble":6,"cta":7,"message":10},"2026-10-13","2026-11-30","Cache Poisoning:",{"href":8,"label":9},"\u002Fcache-poisoning-the-cache-you-cant-purge","Read it","The cache you can't purge.",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":15},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 12a4 4 0 1 0 8 0a4 4 0 1 0-8 0m-5 0h1m8-9v1m8 8h1m-9 8v1M5.6 5.6l.7.7m12.1-.7l-.7.7m0 11.4l.7.7m-12.1-.7l-.7.7\"\u002F>",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":17},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 3h.393a7.5 7.5 0 0 0 7.92 12.446A9 9 0 1 1 12 2.992z\"\u002F>",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":19},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\"\u002F>",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":21},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"\u002F>",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":23},"\u003Cpath fill=\"currentColor\" d=\"M23.498 6.186a3.02 3.02 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.02 3.02 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.02 3.02 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.02 3.02 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814M9.545 15.568V8.432L15.818 12z\"\u002F>",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":25},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":27},"\u003Cpath fill=\"currentColor\" d=\"M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z\"\u002F>",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":29,"hidden":30},"\u003Cpath fill=\"currentColor\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z\"\u002F>",true,{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":32},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M17 7L7 17M8 7h9v9\"\u002F>",{"id":34,"title":35,"body":36,"categories":547,"coverImage":551,"date":552,"description":553,"draft":14,"extension":554,"meta":555,"navigation":30,"noindex":14,"path":556,"readingTime":557,"seo":558,"slug":559,"stem":559,"updatedAt":560,"youtubeId":42,"__hash__":561},"blog\u002Fhow-i-found-idors-that-shouldnt-exist.md","How I Found IDORs That Shouldn’t Exist",{"type":37,"value":38,"toc":524},"minimark",[39,43,47,50,55,67,71,87,90,103,106,110,144,147,151,161,166,169,174,177,181,184,189,200,204,207,212,225,229,232,237,253,257,260,265,275,279,282,287,294,298,301,306,309,313,316,321,333,341,344,349,355,359,362,407,413,420,427,432,447,457,461,464,469,472,476,504,508,514,517,520],[40,41],"post-media",{"video":42},"lfFfJTEFK4Y",[44,45,46],"p",{},"Imagine you’re testing a major program. You poke one endpoint and, suddenly, you can see customer data you absolutely shouldn’t. Not because of a flashy payload - because of sloppy access control logic.",[44,48,49],{},"That’s IDOR territory. Not the classroom version, but real-world IDORs that lead to account takeover, data exposure, or worse. This article skips definitions and goes straight to the tools and tricks that find impact in live targets.",[51,52,54],"h2",{"id":53},"idors-are-everywhere","IDORs are everywhere",[44,56,57,58,62,63,66],{},"CRMs, e-commerce, project trackers, BI dashboards, healthcare portals - any app built around users, objects, or lists can contain IDORs. The question isn’t ",[59,60,61],"em",{},"if"," they exist - it’s ",[59,64,65],{},"where"," they hide. That means your hunting starts with mapping the app’s data surface (APIs, list endpoints, profile pages), not blind ID flipping.",[51,68,70],{"id":69},"how-to-think-about-it","How to think about it",[44,72,73,74,78,79,82,83,86],{},"Novice approach: change ",[75,76,77],"code",{},"id=10"," to ",[75,80,81],{},"id=9"," and hope for a popup.",[84,85],"br",{},"\nPro approach: ask what the endpoint assumes, how it’s parsed, and how different layers (router, proxy, app, cache) normalize requests.",[44,88,89],{},"Shift your question from “Can I change this number?” to:",[91,92,93,97,100],"ul",{},[94,95,96],"li",{},"Which controller handles this path?",[94,98,99],{},"Is there a separate endpoint that bypasses the same check?",[94,101,102],{},"Does the app accept alternate formats (strings, encoded chars, different versions)?",[44,104,105],{},"That mental model is the difference between a noisy scan and a real find.",[51,107,109],{"id":108},"example-context-assumptions","Example context & assumptions",[91,111,112,119,130],{},[94,113,114,115,118],{},"Assume your user ID = ",[75,116,117],{},"100",".",[94,120,121,122],{},"Endpoint we see:",[123,124,128],"pre",{"code":125,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers\u002F100\n","text","",[75,129,125],{},[94,131,132,133,136,137,140,141,143],{},"For another user ",[75,134,135],{},"99"," you get ",[75,138,139],{},"403"," - normal. But that ",[75,142,139],{}," is the starting point, not the end.",[44,145,146],{},"Below are the practical techniques I run, in order (from cheap\u002Fnoise to the deeper ones).",[51,148,150],{"id":149},"the-techniques-what-to-try-with-examples","The techniques (what to try - with examples)",[152,153,154],"blockquote",{},[44,155,156,160],{},[157,158,159],"strong",{},"Rule:"," keep tests low-noise, log every request\u002Fresponse pair (status + path) and redact values you can’t show publicly.",[162,163,165],"h3",{"id":164},"_1-trailing-slash-path-normalization","1) Trailing slash \u002F path normalization",[44,167,168],{},"Some auth checks run on normalized paths but others don’t.",[123,170,172],{"code":171,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers\u002F100       → 200\n\u002Fapi\u002Fv5\u002Fusers\u002F99        → 403\n\u002Fapi\u002Fv5\u002Fusers\u002F99\u002F       → 200\n",[75,173,171],{},[44,175,176],{},"Try adding\u002Fremoving trailing slashes.",[162,178,180],{"id":179},"_2-double-slash-or-obfuscated-path","2) Double-slash or obfuscated path",[44,182,183],{},"Routers and proxies sometimes collapse or ignore duplicate separators.",[123,185,187],{"code":186,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers\u002F99        → 403\n\u002Fapi\u002Fv5\u002F\u002Fusers\u002F\u002F99      → 200\n",[75,188,186],{},[44,190,191,192,195,196,199],{},"Double slashes, ",[75,193,194],{},"\u002F.",", ",[75,197,198],{},"\u002F\u002F."," variations - quick to test.",[162,201,203],{"id":202},"_3-version-downgrade-legacy-endpoints","3) Version downgrade (legacy endpoints)",[44,205,206],{},"Older API versions may miss modern checks.",[123,208,210],{"code":209,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers\u002F99        → 403\n\u002Fapi\u002Fv2\u002Fusers\u002F99        → 200\n",[75,211,209],{},[44,213,214,215,195,218,195,221,224],{},"Try ",[75,216,217],{},"v4",[75,219,220],{},"v3",[75,222,223],{},"v2"," - especially on apps that keep multiple API versions.",[162,226,228],{"id":227},"_4-subpath-endpoint-variant-profile-details","4) Subpath \u002F endpoint variant (profile \u002F details)",[44,230,231],{},"Different controllers sometimes apply inconsistent rules.",[123,233,235],{"code":234,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers\u002F99\u002Fprofile    → 200\n\u002Fapi\u002Fv5\u002Fusers\u002F99\u002Fdetails    → 200\n",[75,236,234],{},[44,238,239,240,195,243,195,246,195,249,252],{},"Check ",[75,241,242],{},"\u002Fprofile",[75,244,245],{},"\u002Fdetails",[75,247,248],{},"\u002Finfo",[75,250,251],{},"\u002Fsummary"," variants.",[162,254,256],{"id":255},"_5-multi-id-filter-parameter-abuse","5) Multi-ID \u002F filter parameter abuse",[44,258,259],{},"List endpoints that accept filters or multi-IDs can leak others.",[123,261,263],{"code":262,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers?where=id:100,99   → returns both records\n",[75,264,262],{},[44,266,267,268,270,271,274],{},"Try comma lists, ",[75,269,65],{}," filters, ",[75,272,273],{},"ids[]=…",", etc.",[162,276,278],{"id":277},"_6-query-param-vs-path","6) Query param vs path",[44,280,281],{},"Same resource accessible through different routes with different checks.",[123,283,285],{"code":284,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers\u002F99           → 403\n\u002Fapi\u002Fv5\u002Fusers?id=99        → 200\n",[75,286,284],{},[44,288,289,290,293],{},"Test ",[75,291,292],{},"id"," in path vs query string.",[162,295,297],{"id":296},"_7-type-confusion-string-vs-integer","7) Type confusion - string vs integer",[44,299,300],{},"Different parsing code paths may treat types differently.",[123,302,304],{"code":303,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fusers\u002F99           → 403\n\u002Fapi\u002Fv5\u002Fusers\u002F\"99\"         → 200\n\u002Fapi\u002Fv5\u002Fusers\u002Fabc99        → 200\n",[75,305,303],{},[44,307,308],{},"Try quoting numbers, adding alpha prefixes, or sending JSON body IDs instead.",[162,310,312],{"id":311},"_8-leading-zeros-hex-alternate-formats","8) Leading zeros \u002F hex \u002F alternate formats",[44,314,315],{},"Numeric parsing quirks can be abused.",[123,317,319],{"code":318,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fprojects\u002F099       → 200\n\u002Fapi\u002Fv5\u002Fprojects\u002F0x63      → 200\n",[75,320,318],{},[44,322,289,323,195,326,195,329,332],{},[75,324,325],{},"099",[75,327,328],{},"0xNN",[75,330,331],{},"0NNN"," forms where applicable.",[162,334,336,337,340],{"id":335},"_9-null-termination-control-characters-00","9) NULL \u002F termination \u002F control characters (",[75,338,339],{},"%00",")",[44,342,343],{},"Some parsers don’t expect control chars and end up truncating or ignoring trailing validation.",[123,345,347],{"code":346,"language":126,"meta":127},"\u002Fapi\u002Fv5\u002Fprojects\u002F99%00     → 200\n",[75,348,346],{},[44,350,351,352,354],{},"Null byte (",[75,353,339],{},") and other control encodings can bypass checks when not properly sanitized.",[162,356,358],{"id":357},"_10-header-proxy-based-bypass-x-original-url-x-forwarded-for","10) Header \u002F proxy-based bypass (X-Original-URL \u002F X-Forwarded-For)",[44,360,361],{},"Reverse proxies sometimes forward headers that alter internal routing or auth decisions. Test carefully and within program rules.",[123,363,367],{"code":364,"language":365,"meta":127,"className":366,"style":127},"GET \u002Fapi\u002Fv5\u002Fadmin\u002F99\nHost: target\nX-Original-URL: \u002Fapi\u002Fv5\u002Fadmin\u002F100\n→ returns 200 (if proxy honored header)\n","http","shiki shiki-themes vitesse-dark vitesse-light",[75,368,369,382,392,401],{},[370,371,374,378],"span",{"class":372,"line":373},"line",1,[370,375,377],{"class":376},"sR8n-","GET",[370,379,381],{"class":380},"sG2Fq"," \u002Fapi\u002Fv5\u002Fadmin\u002F99\n",[370,383,385,388],{"class":372,"line":384},2,[370,386,387],{"class":376},"Host:",[370,389,391],{"class":390},"sRRDT"," target\n",[370,393,395,398],{"class":372,"line":394},3,[370,396,397],{"class":376},"X-Original-URL:",[370,399,400],{"class":390}," \u002Fapi\u002Fv5\u002Fadmin\u002F100\n",[370,402,404],{"class":372,"line":403},4,[370,405,406],{"class":380},"→ returns 200 (if proxy honored header)\n",[44,408,409,412],{},[157,410,411],{},"Caution:"," header tests can be noisy; know program policy and keep it passive.",[162,414,416,417],{"id":415},"_11-unicode-encoded-space-trick-the-deepwinner-technique","11) ",[157,418,419],{},"Unicode \u002F encoded-space trick - the deep\u002Fwinner technique",[44,421,422,423,426],{},"This is the one that repeatedly gave me real, high-impact bugs. It’s simple: introduce an encoded space (",[75,424,425],{},"%20",") or subtle encoded character around the ID so different layers normalize it differently.",[123,428,430],{"code":429,"language":126,"meta":127},"\u002Fapi\u002Fv1\u002Fprojects\u002F99       → 403\n\u002Fapi\u002Fv1\u002Fprojects\u002F99%20    → 200   ← the hit\n",[75,431,429],{},[44,433,434,435,437,438,195,440,195,443,446],{},"Variants to try: ",[75,436,425],{}," before the ID, trailing ",[75,439,425],{},[75,441,442],{},"%20\u002F",[75,444,445],{},"%09",", combined with version downgrade or trailing slashes.",[44,448,449,450,453,454,456],{},"This trick works because one layer sees ",[75,451,452],{},"99%20"," as ",[75,455,135],{},"(with a trailing space) and another layer strips\u002Fnormalizes it differently - effectively sidestepping the auth hook.",[162,458,460],{"id":459},"_12-composite-chained-variants","12) Composite \u002F chained variants",[44,462,463],{},"If a single trick fails, combine two or three:",[123,465,467],{"code":466,"language":126,"meta":127},"\u002Fapi\u002Fv2\u002Fprojects\u002F99%20\u002F   → 200\n",[75,468,466],{},[44,470,471],{},"Downgrade + encoded char + path tweak = often effective.",[51,473,475],{"id":474},"quick-recap-checklist-to-copy-in-your-notes","Quick recap - checklist to copy in your notes",[91,477,478,481,484,487,490,498,501],{},[94,479,480],{},"Find the JSON\u002FAPI endpoints (not the rendered HTML) - that’s your surface.",[94,482,483],{},"Try cheap, low-noise tweaks first: trailing slash, double slash, subpaths, query params.",[94,485,486],{},"Test version downgrades - old APIs are gold.",[94,488,489],{},"Try type\u002Fformat tricks: strings, leading zeros, hex.",[94,491,492,493,195,495,497],{},"Try encoding tricks: ",[75,494,339],{},[75,496,425],{},", control chars.",[94,499,500],{},"Combine tricks when single tests fail.",[94,502,503],{},"Log request + response (status + body snippet) - that becomes your PoC.",[51,505,507],{"id":506},"outro","Outro",[44,509,510,511,513],{},"This is tactical work: small tweaks, methodical testing, and the right mindset. A boring ",[75,512,139],{}," isn’t an obstacle - it’s a diagnosis. Ask the right questions, test the right angles, and you’ll stop getting noise and start finding impact.",[44,515,516],{},"If you want more tactical breakdowns (short, focused, practical), tell me which area: API logic, CORS chains, file uploads, or something else - and I’ll dig one up. I read every comment.",[44,518,519],{},"If you have questions, leave them below or ping me on Twitter.",[521,522,523],"style",{},"html pre.shiki code .sR8n-, html code.shiki .sR8n-{--shiki-default:#4D9375;--shiki-light:#1E754F}html pre.shiki code .sG2Fq, html code.shiki .sG2Fq{--shiki-default:#DBD7CAEE;--shiki-light:#393A34}html pre.shiki code .sRRDT, html code.shiki .sRRDT{--shiki-default:#C98A7D;--shiki-light:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":127,"searchDepth":394,"depth":394,"links":525},[526,527,528,529,545,546],{"id":53,"depth":384,"text":54},{"id":69,"depth":384,"text":70},{"id":108,"depth":384,"text":109},{"id":149,"depth":384,"text":150,"children":530},[531,532,533,534,535,536,537,538,539,541,542,544],{"id":164,"depth":394,"text":165},{"id":179,"depth":394,"text":180},{"id":202,"depth":394,"text":203},{"id":227,"depth":394,"text":228},{"id":255,"depth":394,"text":256},{"id":277,"depth":394,"text":278},{"id":296,"depth":394,"text":297},{"id":311,"depth":394,"text":312},{"id":335,"depth":394,"text":540},"9) NULL \u002F termination \u002F control characters (%00)",{"id":357,"depth":394,"text":358},{"id":415,"depth":394,"text":543},"11) Unicode \u002F encoded-space trick - the deep\u002Fwinner technique",{"id":459,"depth":394,"text":460},{"id":474,"depth":384,"text":475},{"id":506,"depth":384,"text":507},[548,549,550],"Bug Bounty","Linux","Penetration Testing","\u002Fimages\u002Fblog\u002Fhow-i-found-idors-that-shouldnt-exist\u002Fhow-i-found-idors-that-shouldnt-exist.webp","2025-10-12","IDORs that survive modern access control: trailing slashes, path normalisation, double slashes and obfuscated paths, with testable examples.","md",{},"\u002Fhow-i-found-idors-that-shouldnt-exist",null,{"title":35,"description":553},"how-i-found-idors-that-shouldnt-exist","2025-10-26","-V7koqZCbrN37As_rnUROSsyugxcrO0UoQ2Jgvcbgus",{"older":563,"newer":568,"total":573},{"slug":564,"title":565,"date":566,"position":567},"all-you-need-to-start-bug-bounty-the-3-essentials","All You Need to Start Bug Bounty. The 3 Essentials","2025-10-01",19,{"slug":569,"title":570,"date":571,"position":572},"the-trashcash-turning-deleted-files-into-bounties","The TrashCash | Turning Deleted Files Into Bounties","2025-10-15",17,68,{"id":42,"title":35,"published":575,"url":576,"description":577,"durationSeconds":578,"viewCount":579,"thumbnail":580,"thumbnailSrcset":581},"2025-10-26T19:00:46Z","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lfFfJTEFK4Y","In this episode, we’re diving straight into one of the most overlooked - and most powerful vulnerabilities in bug bounty: IDORs and broken access controls. No definitions, no theory - just the real mindset, the logic, and the techniques that turn a simple “403 Forbidden” into full access.",1115,24738,"\u002Fimages\u002Fvideos\u002FlfFfJTEFK4Y-800.webp","\u002Fimages\u002Fvideos\u002FlfFfJTEFK4Y-800.webp 800w, \u002Fimages\u002Fvideos\u002FlfFfJTEFK4Y-1280.webp 1280w",{"left":12,"top":12,"width":13,"height":13,"rotate":12,"vFlip":14,"hFlip":14,"body":583},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M7 9.667A2.667 2.667 0 0 1 9.667 7h8.666A2.667 2.667 0 0 1 21 9.667v8.666A2.667 2.667 0 0 1 18.333 21H9.667A2.667 2.667 0 0 1 7 18.333z\"\u002F>\u003Cpath d=\"M4.012 16.737A2 2 0 0 1 3 15V5c0-1.1.9-2 2-2h10c.75 0 1.158.385 1.5 1\"\u002F>\u003C\u002Fg>",1791941257638]