OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p...

82
OWASP Juice Shop Achieving sustainability for open source projects https://www.owasp.org/index.php/OWASP_Juice_Shop_Project Presentation by / Björn Kimminich @bkimminich 0 Tweet Follow @owasp_juiceshop Follow @bkimminich Follow @bkimminich 148 Star 335 Like 49

Transcript of OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p...

Page 2: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Chapter One

WAT?

Page 3: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

OWASP Juice Shop......is an intentionally insecure webapp written inNode.js, Express and AngularJS. It contains 38+

hacking challenges of varying di៝�culty tracked ona score board.

Page 4: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Modern Web-ArchitectureJavascript all the way from UI to REST API

Page 5: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

OWASP Juice Shop CTF......is a commandline tool written in Node.js andpublished on NPM.js. It helps you to set up and

host CTF events on the platform with the JuiceShop challenges.

CTFd

Page 6: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

<!‐‐ uncomment this and the following slide **ONLY** if...

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐>

Page 7: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

<!‐‐ ...Juice Shop got promoted to  Lab  Project 

during the Project Summit prior to this AppSecEU! :‐D

The next OWASP Connector should make this official! (But you heard it here first!)

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐>

Page 8: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Chapter Two

Open SourceAntipatterns

Page 9: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Barren READMEAn empty or lackluster front-page radiates the impression that

nobody takes serious care of the project.

Page 10: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Bad Example

Page 11: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Worse Example

Page 12: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Worst Example

Page 13: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Good Example

Page 14: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Better(?) Example

Page 15: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Pile of IssuesOpen issues pile up in the ticketing system, most of them

unanswered and unattended.

Page 16: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

A pile of unattended issues

(🤔)

Page 17: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Really a 💩-pile of unattended issues

Page 18: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Counter: Use  labels  properly

Page 19: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Agile Counter: Kanban Board

https://huboard.com/bkimminich/juice-shop

Page 20: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

PR DisasterPull Requests are routinely ignored or �ogged to death.

Page 21: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Ignored Pull Requests

(🤔)

Page 22: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example for a PR 韹�ogged to death*https://github.com/zaproxy/zaproxy/pull/2837

*Disclaimer: This example should by no means imply that the ZAP team is routinely �ogging PRs to death! On thecontrary, they o៛�er a helping hand to even those who totally ignore their !written contribution requirements

Page 23: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Good Counter: Contribution Guide (ZAP)

https://github.com/zaproxy/zaproxy/blob/develop/CONTRIBUTING.md#guidelines-for-pull-request-pr-submission-and-processing

Page 24: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Contribution Guide (Juice Shop)

https://github.com/bkimminich/juice-shop/blob/master/CONTRIBUTING.md

Page 25: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Auto Counter: 👊-enforced Coding Style

http://standardjs.com

Page 26: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Solecistic VersioningThe syntax (MAJOR.MINOR.PATCH) is used while

its semantics are not adhered to.Semantic Versioning

Page 27: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Bad Example: AngularJS 1.x

Page 29: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Juice Shop takes it seriousFor a tiny incompatible con�guration-�le change Juice Shop went from 2.26.0 to 3.0.0

Page 30: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Major ZeroNot even the original author thinks that the project is mature

enough to release a 1.x version from it.

Page 31: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: z85‐cli😜

Page 32: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Chapter Three

My little OSSSustainability

Toolbox

Page 33: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Git FlowThe master branch stores the o៝�cial release history, while

development happens on the develop branch.

Page 34: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Git Flow ⁒ Feature Branches

Page 35: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Clean Code

Page 36: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Clean Javascript! 😮'use strict' 

var path = require('path') var utils = require('../lib/utils') var challenges = require('../data/datacache').challenges 

exports = module.exports = function servePremiumContent () {   return function (req, res) {     if (utils.notSolved(challenges.premiumPaywallChallenge)) {       utils.solve(challenges.premiumPaywallChallenge)     }     res.sendFile(path.resolve(__dirname, '../app/private/under­construction.gif'))   } }

Page 37: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Well, never mind...fs.copy('app/index.template.html', 'app/index.html', {overwrite: true}, function () {       if (config.get('application.logo')) {         var logo = config.get('application.logo')         if (utils.startsWith(logo, 'http')) {           var logoPath = logo           logo = decodeURIComponent(logo.substring(logo.lastIndexOf('/') + 1))           utils.downloadToFile(logoPath, 'app/public/images/' + logo)         }         var logoImageTag = '<img class="navbar­brand navbar­logo" src="/public/images/' + logo +         replace({ regex: /<img class="navbar­brand navbar­logo" (.*?)="">/, replacement: logoImageTag, paths: [      }       if (config.get('application.theme')) {         var themeCss = 'bower_components/bootswatch/' + config.get('application.theme') +         replace({ regex: /bower_components\/bootswatch\/.*\/bootstrap\.min\.css/, replacement: themeCss, paths: [      }     })

...it's still Javascript at the end of the day! 🤐

Page 38: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Test Automation

Page 39: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: UI Unit Testit('should hold anonymous placeholder for email if current user is not logged in',   inject(function () {       $httpBackend.whenGET('/rest/user/whoami').respond(200, {user: {}}) 

      $httpBackend.flush() 

      expect(scope.userEmail).toBe('anonymous')   }) )

Page 40: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: API Integration Testfrisby.create('GET password change without passing any passwords')   .get(REST_URL + '/user/change­password')   .expectStatus(401)   .expectBodyContains('Password cannot be empty')   .toss()

No-idea-why-this-💩-happens-snippet-injection Vulnerability: Did anyone notice how above code was totallybutchered by highlight.js beginning at the opening single quote in line 1?

Page 41: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: Challenge E2E Testdescribe('challenge "loginAdmin"', function () {   it('should log in Admin with SQLI attack on email field using "\' or 1=1­­"', function    email.sendKeys('\' or 1=1­­')     password.sendKeys('a')     loginButton.click() 

    expect(browser.getLocationAbsUrl()).toMatch(/\/search/)   })   protractor.expect.challengeSolved({challenge: 'Login Admin'}) })        

Page 42: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: Checking if a challenge is solvedprotractor.expect = {   challengeSolved: function (context) {     describe('(shared)', function () {       beforeEach(function () {         browser.get('/#/score­board')       }) 

      it("challenge '" + context.challenge + "' should be solved on score board", function        expect(element(by.id(context.challenge + '.solved')).getAttribute('class')).not.toMatch(        expect(element(by.id(context.challenge + '.notSolved')).getAttribute('class')).toMatch(      })     })   } }        

Page 43: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

What is a realistic goal for Test Coverage ?

100%

Page 44: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Juice Shop Test CoverageHaving all tests pass after a commit means, it's

safe to merge PRs or publish a new release!

Juice Shop CTF Extension

Page 45: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Mutation Testing

Reality check: Do your tests actually test stu៛�?

Page 46: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: Report for Juice Shop CTF

Page 47: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

A realistic goal for Mutation Coverage ?

100%

Page 48: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Juice Shop Mutation CoverageJuice Shop CTF Extension

92%* 98%*of the UI unit tests!

(😏)

Page 49: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

CI/CD

Page 50: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Chapter undefined

Live Dual ReleaseWhat could possibly go wrong?

Page 51: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Release DashboardJuice Shop

buildbuild passingpassing buildbuild passingpassing releaserelease v3.0.1v3.0.1

CTF Extension

buildbuild passingpassing releaserelease v1.0.1v1.0.1

Page 52: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Chapter 3 (continued)

My little OSSSustainability

Toolbox

Page 53: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Quality Metrics

Page 54: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: Code Climate Stats

Page 55: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: bitHound Dashboard

Page 56: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: Coveralls 😡 at CTF-Extension

Page 57: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

And now for the most important metric of all...

🚚

Page 58: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

🚚 Truck FactorThe number of team members that would have to leave the project

to e៛�ectively kill it.

Page 59: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

What is a realistic goal for Truck Factor ?

∞Meaning: If the whole team leaves, a new developer can take overand would be able to maintain & continue working on the project!

Page 60: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Dependency Control

Page 61: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Example: Gemnasium Dashboard

Page 62: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Chapter 4.1

New OpenSource

Antipatterns

Page 63: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Badge BarrageThe front-page is overcrowded with (mostly useless) information

and status badges.

Page 64: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Overexaggerated Example

Page 65: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Bad Example

Page 66: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Coin Flip CI✔ ✔ ❌✔ ❌✔ . With no code changes in between.

Page 67: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

I wonder how our Live Release is doing...

🤞🙈😱🔮

Page 68: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Free beerSome services might be free of charge for OSS projects but come

with some other hidden costs or annoyance.

Page 69: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _
Page 70: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _
Page 71: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Contributor LaurelsNot giving enough credit to contributors.

Page 72: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Easy Counter: Make them visible

Page 73: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Some contribs deserve bonus visibility

(CTFd SQLs🚩)Josh Grossmann (Custom theming🎭)Timo Pagel

(CTF🌟/Docker📦)Jannik Hollenbach

Page 74: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

git commits are not everything!

Page 75: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Juice Shop's Crowdin Translators

https://crowdin.com/project/owasp-juice-shop

Page 76: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Bloggers and Podcasters

https://github.com/bkimminich/juice-shop#references

Page 77: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Conferences & Meetups

https://github.com/bkimminich/juice-shop#references

Page 78: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Pro Counter: Stickers!

Page 79: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Pro+ Counter: Shirts & Stuff!

Page 80: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Chapter NaN

Release Outcome✔ =😎 or ❌=😭?

Page 81: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Epic 😎/😭 DashboardJuice Shop

buildbuild passingpassing buildbuild passingpassing releaserelease v3.0.1v3.0.1

CTF Extension

buildbuild passingpassing releaserelease v1.0.1v1.0.1

Page 82: OWASP Juice Shop Juice...OWASP Juice Shop Achieving sustainability for open source projects h t t p s : / / w w w . o w a s p . o r g / i n d e x . p h p / O W A S P _ J u i c e _

Copyright (c) 2017 Created with - The HTML Presentation Framework

Björn Kimminichreveal.js