The fuzzer seems to be http://lcamtuf.coredump.cx/afl/
And an interesting blog post about it is http://lcamtuf.blogspot.ca/2014/11/pulling-jpegs-out-of-thin-air.html <q>American fuzzy lop is a security-oriented fuzzer that employs a novel type of compile-time instrumentation and genetic algorithms to automatically discover clean, interesting test cases that trigger new internal states in the targeted binary.</q> On Thu, Jan 8, 2015 at 5:29 PM, Richard Hipp <d...@sqlite.org> wrote: > On 1/8/15, Michal Zalewski <lcam...@coredump.cx> wrote: > >> I have been running afl-fuzz against sqlite and bumped in a bunch of >> bugs that seem to crash the sqlite3 binary > > Fixed here: https://www.sqlite.org/src/info/fe578863313128 > > Bug report for your trophy case: > https://www.sqlite.org/src/info/a59ae93ee990a55 > > Nice work. I've never heard of afl-fuzz before, but you can bet I'm > going to be studying up on it! > > > (but do not seem to be a >> security problem, other than in the denial-of-service sense). There >> are four seemingly distinct patterns, with test cases included inline: >> >> -- test1.sql -- >> create table t0(t);insert into t0 >> select strftime(); >> -- eof -- >> >> This one is a failure in: >> >> sqlite3DbMallocRaw (db=0x2, n=32) at sqlite3.c:20567 >> 20567 if( db->mallocFailed ){ >> >> where db looks like something in the vicinity of NULL. >> >> #0 sqlite3DbMallocRaw (db=0x2, n=32) at sqlite3.c:20567 >> #1 0x000000000053b17c in sqlite3VdbeMemGrow >> (pMem=pMem@entry=0xa9f4d8, n=<optimized out>, n@entry=32, >> bPreserve=bPreserve@entry=0) at sqlite3.c:61789 >> #2 0x000000000057c904 in sqlite3VdbeMemClearAndResize (szNew=32, >> pMem=0xa9f4d8) at sqlite3.c:61831 >> #3 sqlite3VdbeMemStringify (pMem=0xa9f4d8, enc=<optimized out>, >> bForce=<optimized out>) at sqlite3.c:61949 >> #4 0x000000000057cf40 in valueToText (pVal=0xa9f4d8, enc=enc@entry=1 >> '\001') at sqlite3.c:62681 >> #5 0x000000000057d166 in sqlite3ValueText (pVal=<optimized out>, >> enc=1 '\001') at sqlite3.c:62714 >> #6 0x0000000000598fcd in sqlite3_value_text (pVal=<optimized out>) at >> sqlite3.c:67471 >> #7 strftimeFunc (context=0x7fffffffca90, argc=0, argv=0xa9f358) at >> sqlite3.c:15657 >> >> -- test2.sql -- >> DETACH(select group_concat(q)); >> -- eof -- >> >> That one looks like a distinct NULL ptr deref: >> >> exprSrcCount (pWalker=<optimized out>, pExpr=0xa9eec8) at sqlite3.c:84694 >> 84694 for(i=0; i<pSrc->nSrc; i++){ >> >> #0 exprSrcCount (pWalker=<optimized out>, pExpr=0xa9eec8) at >> sqlite3.c:84694 >> #1 0x00000000004fb86f in sqlite3WalkExpr (pWalker=0x7fffffffc400, >> pExpr=0xa9eec8) at sqlite3.c:79072 >> #2 0x000000000069193f in sqlite3WalkExprList (p=<optimized out>, >> pWalker=0x7fffffffc400) at sqlite3.c:79095 >> #3 sqlite3FunctionUsesThisSrc (pExpr=0xa9ed48, pSrcList=0x0) at >> sqlite3.c:19186 >> #4 resolveExprStep (pWalker=pWalker@entry=0x7fffffffc480, >> pExpr=pExpr@entry=0xa9ed48) at sqlite3.c:14402 >> #5 0x0000000000692bcb in sqlite3WalkExpr (pExpr=0xa9ed48, >> pWalker=0x7fffffffc480) at sqlite3.c:79072 >> #6 sqlite3ResolveExprNames (pNC=0x7fffffffc550, pExpr=0xa9ed48) at >> sqlite3.c:15026 >> #7 0x0000000000694b2b in resolveSelectStep (pWalker=<optimized out>, >> p=<optimized out>) at sqlite3.c:80402 >> ... >> >> -- test3.sql -- >> select(select strftime()); >> -- eof -- >> >> Faults in: >> >> sqlite3ValueText (pVal=0x1, enc=1 '\001') at sqlite3.c:62708 >> 62708 if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && >> pVal->enc==enc ){ >> >> #0 sqlite3ValueText (pVal=0x1, enc=1 '\001') at sqlite3.c:62708 >> #1 0x0000000000598fcd in sqlite3_value_text (pVal=<optimized out>) at >> sqlite3.c:67471 >> #2 strftimeFunc (context=0x7fffffffca90, argc=0, argv=0xaa02d8) at >> sqlite3.c:15657 >> #3 0x00000000007883fb in sqlite3VdbeExec (p=0xa8d5a8) at sqlite3.c:70606 >> #4 0x00000000007aaf11 in sqlite3Step (p=0xaa0018) at sqlite3.c:67809 >> #5 sqlite3_step (pStmt=<optimized out>) at sqlite3.c:2339 >> #6 0x0000000000425228 in shell_exec (db=0xa8d5a8, >> zSql=zSql@entry=0xa8d510 "select(select strftime());", >> pArg=pArg@entry=0x7fffffffcf50, >> pzErrMsg=pzErrMsg@entry=0x7fffffffce68, xCallback=0x41dd80 >> <shell_callback>) >> at shell.c:1365 >> #7 0x000000000042a933 in process_input (p=p@entry=0x7fffffffcf50, >> in=0x7ffff7565640 <_IO_2_1_stdin_>) at shell.c:3697 >> >> -- test4.sql -- >> select n()AND+#00; >> -- eof -- >> >> This dies for me at: >> >> #0 sqlite3ExprIsInteger (p=p@entry=0xa9edb8, >> pValue=pValue@entry=0x7fffffffc9a4) at sqlite3.c:16463 >> #1 0x00000000004f3aed in sqlite3ExprIsInteger (pValue=0x7fffffffc9a4, >> p=0xa9edb8) at sqlite3.c:81085 >> #2 exprAlwaysFalse (p=0xa9edb8) at sqlite3.c:15665 >> #3 sqlite3ExprAnd (db=0xa8d598, pLeft=0xa9eeb8, pRight=0xa9edb8) at >> sqlite3.c:15682 >> #4 0x0000000000687b86 in sqlite3PExpr (pParse=0xa9f0c8, op=72, >> pLeft=0xa9eeb8, pRight=0xa9edb8, pToken=0x0) >> at sqlite3.c:81167 >> #5 0x0000000000752a7c in spanBinaryExpr (pLeft=<optimized out>, >> pLeft=<optimized out>, pRight=<optimized out>, >> pRight=<optimized out>, op=<optimized out>, pParse=<optimized >> out>, pOut=<optimized out>) at sqlite3.c:120313 >> #6 yy_reduce (yyruleno=<optimized out>, yypParser=<optimized out>) at >> sqlite3.c:57482 >> #7 sqlite3Parser (yyp=0xa9f368, yymajor=-13916, yyminor=..., >> pParse=0x3d5, pParse@entry=0xa9f0c8) at sqlite3.c:58144 >> >> /mz >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@sqlite.org >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > > > -- > D. Richard Hipp > d...@sqlite.org > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users -- Andreas Kupries Senior Tcl Developer Code to Cloud: Smarter, Safer, Fasterâ„¢ F: 778.786.1133 andre...@activestate.com, http://www.activestate.com Learn about Stackato for Private PaaS: http://www.activestate.com/stackato _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users