Sachverhalt: A. Das Kreisgericht Rheintal verurteilte X._ am 26. August 2008 unter anderem wegen sexueller Handlungen mit einem Kind (z.N. von Y._), mehrfacher Pornographie, Nötigung sowie Drohung zu einer Freiheitsstrafe von drei Jahren. Auf Berufung der Verteidigung, der Privatklägerschaft und der Staatsanwaltschaft hin sprach ihn das Kantonsgericht St. Gallen am 3. Juni 2009 zusätzlich der Vergewaltigung (z.N. von Y._), der sexuellen Handlungen mit einem Kind (z.N. von Z._), der Gewalt und Drohung gegen Behörden und Beamte sowie der mehrfachen Widerhandlung gegen das Betäubungsmittelgesetz schuldig. Es verurteilte ihn zu einer Freiheitsstrafe von fünf Jahren und ordnete die Verwahrung an. Dagegen gelangte X._ an das Bundesgericht, welches seine Beschwerde am 25. März 2010 teilweise guthiess und den Schuldspruch wegen Vergewaltigung aufhob. Die Frage der ebenfalls angefochtenen Verwahrung liess es offen (Urteil 6B_777/2009 vom 25. März 2010). B. Das Kantonsgericht St. Gallen sprach X._ anlässlich der Rückweisungsverhandlung vom 14. Dezember 2010 vom Vorwurf der Vergewaltigung frei. Es bestätigte die übrigen Schuldsprüche, verurteilte ihn zu einer Freiheitsstrafe von vier Jahren und ordnete eine stationäre therapeutische Massnahme nach Art. 59 StGB an. Der Massnahmevollzug begann vorzeitig am 29. Dezember 2010 im Gefängnis Uznach und wurde am 31. Januar 2011 in der Justizvollzugsanstalt Pöschwies fortgesetzt. Das Amt für Justizvollzug des Kantons St. Gallen hob die stationäre therapeutische Massnahme am 27. Januar 2012 auf, lehnte die bedingte Entlassung von X._ ab und beantragte dem Kantonsgericht St. Gallen die Umwandlung der stationären Massnahme in eine Verwahrung. Die Staatsanwaltschaft des Kantons St. Gallen stellte am 24. Februar 2012 dieselben Anträge. Mit Entscheid vom 25. Februar 2013 ordnete das Kantonsgericht St. Gallen die Verwahrung von X._ an. C. Mit Beschwerde in Strafsachen beantragt X._, der kantonsgerichtliche Entscheid sei aufzuheben. Er ersucht um unentgeltliche Rechtspflege und Verbeiständung.